我有一个基于会话的bean的JSF 1.2应用程序。该bean用于搜索我们的数据库。 在我们的主页上,我有一些HTML控件,它们构建了一个搜索参数的URL,然后将浏览器URL设置为JSP。 由于bean是基于会话的,因此第一次通过主页访问时,参数将正确传递。但是,后续访问意味着忽略参数,因为bean中没有函数被执行。 强制bean中的init函数重新加载的最佳方法是什么?
答案 0 :(得分:2)
这是会话范围bean的完全预期行为。它存储在HTTP会话中,只要HTTP会话存在,就会重复使用,而不是在每个HTTP请求上重新创建/重新初始化。如果您打算在每个HTTP请求上重新创建/重新初始化bean,那么您应该将它放在请求范围内。
但是,如果bean表示请求范围数据和会话范围数据的混合,那么您应该将bean拆分为两个单独的bean,一个请求范围用于请求范围数据,一个范围用于会话范围范围数据。您可以在请求作用域上使用<managed-property>
来将会话作用域注入作为请求作用域属性的属性。通过这种方式,您可以将操作放在请求作用域中,这需要访问/操作会话范围的数据。