日期:2014-05-20  浏览次数:20673 次

关于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>