当前位置: 代码迷 >> J2EE >> 关于DWR刷新List的有关问题
  详细解决方案

关于DWR刷新List的有关问题

热度:105   发布时间:2016-04-22 02:53:33.0
关于DWR刷新List的问题
现JSP页面已接受到dwr返回的数组,用的是定时刷新
var time = 5000;
window.setInterval('getList()',time);
function getList()
{
alltask.AllTaskList(callbackuserlist); 
}

function callbackuserlist(taskList)
{
for(var i=0;i<taskList.length;i++)

//alert(taskList[i].errand_UserName);
}  
}
在进入JSP页面之前,已查询数据显示在页面上
<logic:notEmpty name="taskList">
<logic:iterate id="element" name="taskList">
<ul>
<li>${element.errand_UserName }</li>
<li>${element.trademark }</li>
<li>${element.typeName }</li>
<li>${element.province }-${element.city }</li>
<li>${element.offer }</li>
<li>${element.address }</li>
<li>${element.meanName}</li>
<li class="none"><html:link page="/SelNOAcpt/${element.city }/${element.task_id}-1-first">认领</html:link></li>
</ul>
  </logic:iterate>
  </logic:notEmpty>
我要做的是进入页面显示了数据,需要5秒钟刷新一次这段数据,我不想在JS里面写HTML代码,。因为这段代码必须要存在,请问如果才能把返回的数据传给标签中的taskList,本人试过
//document.getElementById("element").value=taskList;用来传值,但是不行
求高人解答


------解决方案--------------------
dwr没用过,但是你页面的写法从我的了解来看你必须让页面重新加载(刷新)才能拿到新的list
------解决方案--------------------
做不到,
<logic:iterate id="element" name="taskList"> 
<ul> 
<li>${element.errand_UserName } </li> 
<li>${element.trademark } </li> 
<li>${element.typeName } </li> 
<li>${element.province }-${element.city } </li> 
<li>${element.offer } </li> 
<li>${element.address } </li> 
<li>${element.meanName} </li> 
<li class="none"> <html:link page="/SelNOAcpt/${element.city }/${element.task_id}-1-first">认领 </html:link> </li> 
</ul> 
</logic:iterate> 
是在编译期解析的.除非整个刷新页面重新编译
------解决方案--------------------
如果你想局部刷新,比较好的方式还是通过ajax异步请求数据,然后在js中解析,然后通过js动态生成html.
${element.meanName}这种表达是都是在服务器端解析完成的.不是浏览器,也不是js能处理的.
------解决方案--------------------
用JS是当然可以处理dwr返回的list集合数据了,dwr会自动将list转换成数组,
在显示数据的时候,我常用的就是用dom来动态创建的tr、td的数据,页面定义刷新,5秒钟刷新一次,在每次执行的时候调用创建tr、td的数据,在执行创建的时候先执行移除dom创建的数据,说了半天废话,详细请看,这里的吧:
JScript code
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>My JSP 'refresh.jsp' starting page</title>    <script type='text/javascript' src='/refresh_cdd/dwr/interface/CDD.js'></script>      <script type='text/javascript' src='/refresh_cdd/dwr/engine.js'></script>    <script type='text/javascript' src='/refresh_cdd/dwr/util.js'></script>    <script type="text/javascript" src="js/prototype.js"></script>    <script type="text/javascript">        var timeOK;        function startRefresh(){            CDD.loadAll(filltable);            timeOK = window.setTimeout("startRefresh();",2000);        }        function stopRefresh(){            window.clearTimeout(timeOK);        }                function filltable(xhr){            resetTable();            var c = $("showdata");            xhr.each(function(use){                c.appendChild(createTR(use));            });        }                function createTR(data){            var createTR = document.createElement("TR");            var createTD_ID = document.createElement("TD");            var createTD_NAME = document.createElement("TD");            var createTD_PRICE = document.createElement("TD");            var createTD_SHULIANG = document.createElement("TD");                        createTD_ID.innerHTML = data.id;            createTD_NAME.innerHTML = data.name;            createTD_PRICE.innerHTML = data.price;            createTD_SHULIANG.innerHTML = data.shuliang;            createTR.appendChild(createTD_ID);            createTR.appendChild(createTD_NAME);            createTR.appendChild(createTD_PRICE);            createTR.appendChild(createTD_SHULIANG);            return createTR;        }                function resetTable(){            var tbd = $("showdata");            var size = tbd.childNodes.length;            for(var i=0;i<size;i++){                tbd.removeChild(tbd.lastChild);            }        }                function init(){            CDD.Thread_cdd();        }    </script>  </head>    <body onload="init();">        <table>            <tbody id="showdata">                <tr>                    <th>员工编号</th>                    <th>员工名字</th>                    <th>价格</th>                    <th>数量</th>                </tr>            </tbody>        </table>        <form>            <input type="button" value="开始2秒中刷新" onclick="startRefresh();"/>            <input type="button" value="停止刷新" onclick="stopRefresh();"/>        </form>  </body></html>
  相关解决方案