我有一个viewscoped bean,它通过f:viewparam接收参数,并使用它们在模型中设置值。页面回发后,参数将从url中消失,但初始参数设置的模型值会以某种方式保留。
这是保留参数的安全方法吗?还是应该在回发时重写url,以便保留初始参数以便后续调用?
参数如何保留?在视图状态?
最佳答案
这是f:viewParam文档所说的:
[...]此标签导致将UIViewParameter作为元数据附加到当前视图。因为UIViewParameter扩展了UIInput,所以任何UIInput标签的所有属性和嵌套子内容在此标签上也有效。
这意味着<f:viewParam>
value
属性将使用request参数进行更新,并存储在viewstate中,并在再次提交页面时重新设置/重新验证。
Arjan Tijms在这里有完整的故事:http://arjan-tijms.omnifaces.org/2011/07/stateless-vs-stateful-jsf-view.html
简而言之:使用@ViewScoped
bean是完全可以的,但是如果您对该值使用昂贵的验证器/转换器,请注意,它将在该页面的每次回发中再次调用它。如果要避免这种情况,请查看BalusC中的this article,它说明了OmniFaces的无状态替代品o:viewParam。
关于java - 回发后对Viewscoped Bean的viewParam的JSF2-行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21098126/