就是说网页回发服务器,再次回到客户端时正常情况下各个标记域的值都会回到初始值,怎么让他们保持回发之前的值呢?在.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的内存,也就不会影响整个系统的性能
谢谢

解决方案 »

  1.   

    java和.net实现上并没有什么区别。只是Java要实现这个功能就要自己实现。很麻烦。
    但是有些框架原生提供了这个方法。比如jsf
      

  2.   

    对于JSP而言,有两个技巧使得字段回填成为可能:
    1 HTML控件有value属性的,生成页面的时候为value属性设值,记得将初始值设给自己的value属性就行了
    2 前面一个页面请求进服务器后,请求参数一直都在请求对象中,生成响应页面的时候直接取这个值好了简单说,如下<input name="name1" value="${param.name1}" />就可以实现name1这个字段的回填效果了
      

  3.   


    是啊,生成页面的时候为value属性设值,关键这个值放在什么地方,对于有些可以从request中取,但有些取不到,那么取不到的还是要放在session之类的地方,如果每次都从数据库中取,也影响性能
      

  4.   

    举个实际的例子吧,最简单的,比如有一个显示用户信息列表的页面,从DB中提出用户信息,放在Collection中,用iterator循环生成一个table用来显示,如下
    [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中会使系统明显变慢
      

  5.   

    哦,说的是替用户缓存会话数据啊。
    只有两个选择了,要么像你说的这样,放Session中。
    要么放页面的form中,下次由用户自己提交给服务器(和用户输入的数据一起),好处是服务器上Session量小了。
      

  6.   

    对了,不放form中,放Cookie中,也能行。
      

  7.   


    放cookie里恐怕太大了
    form中怎么放呢?用input type="hidden"吗?请提示一下,谢谢
      

  8.   

    如果数据量很大,条目杂,在网上传来传去不好,放Session中也不要,也不希望重新查数据库,那么可以外化到文件中。(假设你不喜欢放临时数据到数据库)比较极端的情况就是有些系统会将一些访问频度大的动态页面静态化。
      

  9.   

    建议你用ajax、的json去传大数据量得数据,很好用
      

  10.   

    哎说ajax的连lz的问题都没看懂。说session的还没lz水平高
      

  11.   

    好多时候都是服务器客户端来回传先从页面传到服务器,然后服务器传到客户端,客户端显示 如此循环往复
    如果数据量不是很多的话 可以考了Session
    ajax也可以做到。
      

  12.   

    1.ajax很方便实现这个
    2.提交的时候保存在request里面,回来的时候再从request里面取值
      

  13.   

    用 java的缓存啊, 不过java有什么缓存组件,我还不清楚
      

  14.   

    页面传值 URL 传值
      

  15.   

    url传值不安全。暴漏数据可不好
    数据不多的话,可以使用hidden就可以,对的话就用session吧
      

  16.   

    首先,在session中放入大量数据,本身就不好,会给服务器带来压力。你完全可以做为hidden传到服务器