就是说网页回发服务器,再次回到客户端时正常情况下各个标记域的值都会回到初始值,怎么让他们保持回发之前的值呢?在.net中使用viewstate,asp.net页面会自动把各标记域中的值保存在页面中一起回发,服务器response时用这些事先保存的值重新填充各标记域,这是asp.net技术自动完成的对于java和JSP我都是初初初学,貌似JSP是没有这种技术的,那么可以把这些数据封装成对象保存在session中,在服务器上将session的数据取出为页面赋值。
另外对于input select 这种标记还可以从request中取值,再赋值给页面,但是<td>...<td>像这样的值从request是取不出来的,所以session会更通用一些但是将这些业务数据放在session中,小系统可以,对于较大型系统会严重影响性能,至少我曾经在IIS上使用asp.net是亲身体验过的,因为java和.net都是不定时的自动回收内存,所以当把这些对象放在session后我们不知道什么时候才会被回收,而且用户使用时一个session可能会存在很久,甚至一直到用户下班关机,较大型系统用户又多,不知道java会不会也是这样asp.net的viewstate虽然会增加页面的大小,增加回发的数据量,但页面的生存期很短,不会占用Server的内存,也就不会影响整个系统的性能
谢谢
另外对于input select 这种标记还可以从request中取值,再赋值给页面,但是<td>...<td>像这样的值从request是取不出来的,所以session会更通用一些但是将这些业务数据放在session中,小系统可以,对于较大型系统会严重影响性能,至少我曾经在IIS上使用asp.net是亲身体验过的,因为java和.net都是不定时的自动回收内存,所以当把这些对象放在session后我们不知道什么时候才会被回收,而且用户使用时一个session可能会存在很久,甚至一直到用户下班关机,较大型系统用户又多,不知道java会不会也是这样asp.net的viewstate虽然会增加页面的大小,增加回发的数据量,但页面的生存期很短,不会占用Server的内存,也就不会影响整个系统的性能
谢谢
但是有些框架原生提供了这个方法。比如jsf
1 HTML控件有value属性的,生成页面的时候为value属性设值,记得将初始值设给自己的value属性就行了
2 前面一个页面请求进服务器后,请求参数一直都在请求对象中,生成响应页面的时候直接取这个值好了简单说,如下<input name="name1" value="${param.name1}" />就可以实现name1这个字段的回填效果了
是啊,生成页面的时候为value属性设值,关键这个值放在什么地方,对于有些可以从request中取,但有些取不到,那么取不到的还是要放在session之类的地方,如果每次都从数据库中取,也影响性能
[code=Jav]
..............
..............if(users != null)
{
Iterator<UserBean> itUser = users.iterator();
%>
<table>
<tr>
<th>登录名</th>
<th>真名</th>
<th>显示名</th>
<th>有效性</th>
</tr>
<%
UserBean user = null;
while(itUser.hasNext())
{
user = (UserBean)itUser.next();
%>
<tr>
<td><%=user.getLoginName()%></td>
<td><%=user.getRealName()%></td>
<td><%=user.getDisplayName()%></td>
<td><%=user.getValid()==UserBean.VALID_ISVALID?"有效":"无效"%></td>
<td><a id="edit" name="edit" href="javascript:openEditUser(<%=user.getUserID()%>)">编辑</a></td>
</tr>
<%
}
}
%>
</table>
[/code]页面回发后我不希望再次从DB中提取数据了,于是我目前是吧这个Collection放在了session中,如果属于回发,我就从session中取数据但是根据使用asp.net的经验,如果较大型系统把大量的业务数据放在session中会使系统明显变慢
只有两个选择了,要么像你说的这样,放Session中。
要么放页面的form中,下次由用户自己提交给服务器(和用户输入的数据一起),好处是服务器上Session量小了。
放cookie里恐怕太大了
form中怎么放呢?用input type="hidden"吗?请提示一下,谢谢
如果数据量不是很多的话 可以考了Session
ajax也可以做到。
2.提交的时候保存在request里面,回来的时候再从request里面取值
数据不多的话,可以使用hidden就可以,对的话就用session吧