读书人

关于DWR刷新List的有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

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


[解决办法]
页面上只有这个tbody这部分数据刷新,其他部分不动的。
[解决办法]
嗯嗯,4楼的效果不错,我也这么弄过。
[解决办法]
DWR传过来的值,是放不到请求属性中去的,因为处理DWR的类是非servlet的。
所以只能在JS里来写出你需要的表格。
[解决办法]
顶啦~~
[解决办法]
做不到,只能innerHTML或者innerTEXT吧,局部刷新。
[解决办法]
必需要用到JS去动态生成HTML
[解决办法]
自己取数据,然后又 JS 的方式动态改变页面元素。既然动态了,就不要用 strtus标签和EL表达式。纯 HTML就可以。2 楼说了为什么,4楼给了例子了。楼上其他人说的也有道理。


哈哈,都被你们说了。。。。。。。。。。。

读书人网 >J2EE开发

热点推荐