日期:2014-05-17  浏览次数:20753 次

(奉送100分请各位帮忙啊)JSF的viewstate问题
本帖最后由 benben821024 于 2012-11-29 13:26:21 编辑 关于JSF的viewstate保存的问题。

目前是把viewstate设置成保存为server端,但是这样出现了一个问题就是
每次用同一个浏览器打开不同的tab,比如说用两个tab打开个2不同内容的帖子,然后对之前打开的帖子进行回复的时候,内容竟然跑到后面帖子里面去了。

这个应该是viewstate保存到server端后,只能记住最新状态的viewstate的原因。
我看了一些资料说可以在web.xml中设置让viewstate为每个用户多保存几个最新状态。
     <context-param>
        <param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
        <param-value>10</param-value>
     </context-param>
但是怎么好像不起作用呢?另外,这个设置过大貌似会很耗服务器端memory的。

我知道将它保存在client端就没有这个问题了,但是保存到client端(尽管可以压缩)每个请求都需要传递viewstate,占带宽,页面加载速度也受影响。

请问各位有什么方法让viewstate可以保存在server端,有可以解决我遇到的这个问题呢?
在线等哦~~
------最佳解决方案--------------------
加我QQ:139575990
------其他解决方案--------------------
怎么没人理我涅?
------其他解决方案--------------------
该回复于2012-11-29 13:44:38被管理员删除
------其他解决方案--------------------
为什么一定要用这个viewstate呢?
看你的描述,是对帖子进行回复是吧?那么,回复按钮,你总要按一下吧?
每个帖子也总有一个回复按钮。在回复按钮上添加该帖子的id,传给服务器端,不就可以了?
------其他解决方案--------------------
打开帖子的时候,就获取帖子本身的id,然后设置到回复按钮的value属性中,这个很简单的。
------其他解决方案--------------------
引用:
为什么一定要用这个viewstate呢?
看你的描述,是对帖子进行回复是吧?那么,回复按钮,你总要按一下吧?
每个帖子也总有一个回复按钮。在回复按钮上添加该帖子的id,传给服务器端,不就可以了?
+1
------其他解决方案--------------------
引用:
为什么一定要用这个viewstate呢?
看你的描述,是对帖子进行回复是吧?那么,回复按钮,你总要按一下吧?
每个帖子也总有一个回复按钮。在回复按钮上添加该帖子的id,传给服务器端,不就可以了?

其实我也不想用啊,没有办法我只是个搞维护地~~
你说的这个方法应该是可以的,也不难.只是我做的系统里不止这些,要改的地方比较多(这个系统已经在用了,上面不太让改代码),所以暂时还没有考虑这么做.
高手,我知道这个viewstate比较麻烦,但是还有没有其他的方法哦.拜托啦~~
------其他解决方案--------------------
一个ie窗口的tab是共用一个进程资源的。

你可以开两个ie窗口,注意是两个ie窗口,而不是tab页。


不同的ie窗口分别对应不同的进程,而相同ie窗口其实就是和同一个进程没有区别,自己调用自己。

所有才会有你这样的结果,不信你开两个ie窗口试试就知道了。

------其他解决方案--------------------
这个明显是个bug,开发时出的bug,怎么不能改?可以光明正大地改。
但如果之前没出过这问题,那就恢复原设置。
如果是新开发的功能,这也不符合项目要求,也是必须修改的内容。楼主拿出底气来和项目经理说,不用太纠结。

和项目经理沟通的时候,要说出修改的思路。其实改动相当小。
给你提供下基本思路:
①要在request里面设置帖子的id;如果request里面已经有帖子id了,那么这部分不用修改;
②生成帖子的jsp,按钮的属性,增加value="${帖子对象名.帖子id}"。
比如,原来的按钮为:
<input id="replybtn" type="submit" value=""/>
就改为:
<input id="replybtn" type="submit" value="${帖子对象名.帖子id}"/>
③接收到回复信息,服务器端肯定要检查帖子id的,所以回复的接收逻辑应该不用改。要是服务器端都不辨识下帖子id,那这个系统原始开发就做得太烂了,要向经理申请去打开发者的屁股
------其他解决方案--------------------
引用:
这个明显是个bug,开发时出的bug,怎么不能改?可以光明正大地改。
但如果之前没出过这问题,那就恢复原设置。
如果是新开发的功能,这也不符合项目要求,也是必须修改的内容。楼主拿出底气来和项目经理说,不用太纠结。

和项目经理沟通的时候,要说出修改的思路。其实改动相当小。
给你提供下基本思路:
①要在request里面设置帖子的id;如果request里面已经有帖子id了,那么这部分不……


+1
------其他解决方案--------------------
引用:
一个ie窗口的tab是共用一个进程资源的。

你可以开两个ie窗口,注意是两个ie窗口,而不是tab页。


不同的ie窗口分别对应不同的进程,而相同ie窗口其实就是和同一个进程没有区别,自己调用自己。