即使已实例化ManagedBean例如,在AJAX调用中,也会调用@PostConstruct方法

问题描述

这不是正常现象。如果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}" />

那么每当要从部分保存的状态恢复视图时,都会重新创建视图作用域的bean。这是视图范围的鸡蛋问题,因为为了获得 正确的 视图范围的bean,必须从还原的视图中提取它。

如果您在bindingJSF组件的属性中引用视图作用域bean的属性,也会发生这种情况。

<h:someComponent binding="#{viewScopedBean.someComponent}" />

也可以看看:

解决方法

我有一个@ViewScopeManagedBean和一个@PostConstruct初始化方法。创建新实例时会调用此方法,但每次ajax调用时也会调用此方法。为什么会这样呢?

在AJAX调用中,将调用并执行init-Method,但看不到任何更改。例如,如果我更改init-
Method中的属性,则该属性仅在实例化时可见,而对于AJAX调用则不可见。对于AJAX调用,值更改在@ViewScoped Bean中并不持久。

谁能说出为什么呢?我该如何更改?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...