JSF - 由不同机器上的浏览器共享的会话范围bean

时间:2009-11-20 14:04:00

标签: java session jsf

我们有一个搜索表单,其中过滤器绑定到托管bean(会话范围)上的属性。它不是组件绑定,其属性绑定如<h:inputText value="#{searchBean.filter}"/>

来自不同机器(不同会话)的提交数据正在变得混杂。你搜索“john”,得到“mary”只是因为你身边的那个人刚刚搜索过“mary”。您searchBean.filter的价值是他的提交的数据而非您的数据。

我已经搜索了很多内容并且找不到任何解决方案,只是same problem的发生。

有没有人遇到过这个问题?有线索吗?

谢谢!

2 个答案:

答案 0 :(得分:10)

这可能有两个原因:

  1. bean实际上处于应用程序范围内。
  2. 相关媒体声明为 static
  3. 要修复1),只需确保它在会话范围内 要修复2),只需删除非法修饰符。

答案 1 :(得分:3)

解决了!最后。谢谢你们,请你注意!

就像Balus第一次猜到的那样。这是隐藏在黑暗角落里的static。我真的加倍,三重检查所有寻找静态的东西,但是 - 不要问我为什么 - 有人创建了第二个bean(Foo),它持有SearchBean的静态引用。

在JSP中,有一个action="#{foo.search}"而不是searchBean.search。类Foo的方法名称与SearchBean中的名称相同,只有searchBean.search();

我认为昨天修复这个bug的压力不允许我在JSP中看到这个陷阱。