现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.trade }</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;用来传值,但是不行
求高人解答

解决方案 »

  1.   

    dwr没用过,但是你页面的写法从我的了解来看你必须让页面重新加载(刷新)才能拿到新的list
      

  2.   

    做不到,
    <logic:iterate id="element" name="taskList"> 
    <ul> 
    <li>${element.errand_UserName } </li> 
    <li>${element.trade } </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> 
    是在编译期解析的.除非整个刷新页面重新编译
      

  3.   

    如果你想局部刷新,比较好的方式还是通过ajax异步请求数据,然后在js中解析,然后通过js动态生成html.
    ${element.meanName}这种表达是都是在服务器端解析完成的.不是浏览器,也不是js能处理的.
      

  4.   

    用JS是当然可以处理dwr返回的list集合数据了,dwr会自动将list转换成数组,
    在显示数据的时候,我常用的就是用dom来动态创建的tr、td的数据,页面定义刷新,5秒钟刷新一次,在每次执行的时候调用创建tr、td的数据,在执行创建的时候先执行移除dom创建的数据,说了半天废话,详细请看,这里的吧:<%@ 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>
      

  5.   

    页面上只有这个tbody这部分数据刷新,其他部分不动的。
      

  6.   

    DWR传过来的值,是放不到请求属性中去的,因为处理DWR的类是非servlet的。
    所以只能在JS里来写出你需要的表格。
      

  7.   

    做不到,只能innerHTML或者innerTEXT吧,局部刷新。
      

  8.   

    自己取数据,然后又 JS 的方式动态改变页面元素。既然动态了,就不要用 strtus标签和EL表达式。纯 HTML就可以。2 楼说了为什么,4楼给了例子了。楼上其他人说的也有道理。
    哈哈,都被你们说了。。
      

  9.   

    恩,onload方法只是在进入页面的时候才会执行吧?我想到一个办法,就是在进入页面的时候用onload方法先用dwr请求出数据,放在一个div里面,显示之后再去调用定时刷新请求,返回的数据再去代替先前div里面的数据,不知是否可行,我先试试
      

  10.   

    DWR3.0里面有个 动态包含页面的函数,即 给出一个 url地址,将该地址执行后的源文件返回,我们可以单独写一个页面执行输出list信息,然后再用这种包含的方式,调用就很简单了,类似<c:impirt> <jsp:inlude>效果,不同的是,前2者是 jsp动态脚本,后再是js脚本