eli*_*man 10 ajax jsf postconstruct jsf-2 view-scope
我有一个@ViewScope ManagedBean和一个@PostConstruct初始化方法.创建新实例时会调用此方法,但也会在每次调用ajax时调用此方法.为什么会这样?
在AJAX调用中,调用并执行init-Method,但不会看到任何更改.例如,如果我在init-Method中更改属性,则仅在实例化时可见,而不是在AJAX调用中可见.对于AJAX调用,值更改在@ViewScoped Bean中不是持久的.
任何人都可以告诉为什么会这样吗?我怎么能改变这个?
Bal*_*usC 11
这不是正常行为.如果binding在启用部分状态保存时将标记处理程序属性或JSF组件的属性绑定到视图范围bean 的属性,则会发生这种情况.这被称为问题1492,其在(即将出版的)Mojarra 2.2中得到修复.
通常,您可以通过缺少rendered属性来识别标记处理程序.例如<c:if>,<f:validator>,<ui:include>等,如果这样的标签处理器的属性绑定到视图的财产范围的bean像如下
<c:if test="#{viewScopedBean.something}"></c:if>
<h:inputText><f:validator binding="#{viewScopedBean.validate}" /></h:inputText>
<ui:include src="#{viewScopedBean.includePage}" />
Run Code Online (Sandbox Code Playgroud)
每次从部分保存状态恢复视图时,都将重新创建视图范围bean.这是视图范围的鸡蛋问题,因为为了获得正确的视图范围bean,必须从恢复的视图中提取它.
如果在bindingJSF组件的属性中引用视图范围bean的属性,也会发生这种情况.
<h:someComponent binding="#{viewScopedBean.someComponent}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9848 次 |
| 最近记录: |