是否可以在同一页面上的回发中保持请求范围的bean活动?
一般问题是,当bean在请求结束时被删除并在每个表单提交时重新创建,例如动态操作disabled
,readonly
和rendered
后面的布尔值会重置到他们的默认值并导致表单不再像预期的那样工作。
答案 0 :(得分:16)
我会假设会话范围是而不是一个选项,否则这个问题没什么意义。
您可以使用Tomahawk <t:saveState>
执行此操作。在页面的某处添加以下行:
<t:saveState value="#{bean}" />
RichFaces <a4j:keepAlive>
也是一样的:
<a4j:keepAlive beanName="#{bean}" />
或者如果有空间,请升级到至少JSF 2.x并将bean放在视图范围内:
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
// ...
}
无论如何,当您回发到同一视图并继续从操作方法返回null
或void
时,同一个bean将会存在。
答案 1 :(得分:0)
不是真的,除非你将Bean存储在某处,例如应用程序范围内的Map,以便稍后检索。
为什么不把它作为会话范围?这就是Session范围的含义,因此同一Session期间的多个请求可以达到相同的状态。