我有一个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/

10-11 02:43