是否可以在同一页面上的回发中保持请求范围的 bean 处于活动状态?
一般的问题是,由于 bean 在请求结束时被丢弃并在每次提交表单时重新创建,例如动态操作背后的布尔值disabled
,readonly
并rendered
重置为其默认值并导致表单不再按预期工作。
是否可以在同一页面上的回发中保持请求范围的 bean 处于活动状态?
一般的问题是,由于 bean 在请求结束时被丢弃并在每次提交表单时重新创建,例如动态操作背后的布尔值disabled
,readonly
并rendered
重置为其默认值并导致表单不再按预期工作。
我假设会话范围不是一个选项,否则这个问题没有什么意义。
您可以使用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 将在那里。
不是真的,除非您将 Bean 存储在某个地方,例如应用程序范围内的 Map,以便稍后检索它。
为什么不将其设为 Session 范围?这就是 Session 范围的用途,因此同一 Session 期间的多个请求可以达到相同的状态。