是否有可能在同一页面的回发中保持请求作用域bean的活动?
一般的问题是,由于bean在请求结束时被丢弃,并在每个表单提交时重新创建,例如,动态操作的disabled
, readonly
和rendered
后面的布尔值被重置为默认值,并导致表单不再按预期工作。
我假设会话范围是而不是一个选项,否则这个问题就没有什么意义了。
你可以使用战斧<t:saveState>
。在页面的某处添加以下行:
<t:saveState value="#{bean}" />
RichFaces <a4j:keepAlive>
也做同样的事情:
<a4j:keepAlive beanName="#{bean}" />
或者如果有空间,至少升级到JSF 2。将bean放在视图作用域中:
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
// ...
}
无论哪种方式,当您回发到相同的视图并继续从操作方法返回null
或void
时,相同的bean将存在。
参见:
- 如何选择合适的bean scope?
- 管理bean中View和Request作用域的区别
不完全是这样,除非您将Bean存储在某个地方,例如应用程序作用域中的Map,以便稍后检索它。
为什么不把它设为Session作用域呢?这就是Session作用域的作用,所以同一个Session中的多个请求可以达到相同的状态。