当前位置: 首页 > 面试题库 >

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

寇桐
2023-03-14
问题内容

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

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

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


问题答案:

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

也可以看看:

  • JSF 2.0中的通信- @ViewScoped标记处理程序中失败


 类似资料:
  • 要在实例上调用方法,您必须获取实例的引用并调用该方法。该示例说明了如何获取引用和调用方法,检查 API 以获取可用方法的列表。 // 3 ways of doing the same thing $('#jstree').jstree(true) .select_node('mn1'); $('#jstree') .jstree('select_node', 'mn2'); $.

  • 我正在使用Saxon(如果需要,我可以使用Xalan)XSLT处理器进行一些转换。我想将下面对象的实例作为参数传递给XSLT模板。 所以我创建了这个对象。 在XSLT文件中,我将参数声明为: 现在我的问题是如何在XSLT内调用该对象的任何实例方法(即.getValue())?有可能吗?我知道我可以调用不同Java类的静态方法,但这并不完全是我想要的。 此外,是否可以在XSLT中填充Java对象,即

  • 问题内容: 在Eclipse中调试时如何调用类实例方法? 例如,假设我有以下代码: 我在canvas.drawColor行上有一个断点。当我调试时,代码停止在那一行,并且我可以查看canvas内的变量,但是我也希望能够像在Visual Studio中那样调用canvas内的方法以查看它们返回的结果? 问题答案: 打开“ 显示” 视图,在其中键入要执行的代码,选择它,单击鼠标右键,然后根据您要 执行

  • 我在将E3 RCP应用程序迁移到E4时遇到了问题。我有三个部分。2.样品含量为Lars Vogel(http://www.vogella.com/tutorials/EclipseRCP/article.html#plugin_creatinge4“使用SWT电源小部件”)进行测试,并将其与我的部件进行比较。 长话短说(er):应该创建视图内容的方法(标记为@PostConstruct)不会被调用

  • 问题内容: SampleBean: 和配置文件是这样的: 而且我没有在bean标记上设置default-init-method属性。 任何机构都可以说出为什么@PostConstruct方法没有被调用的原因。 问题答案: 你需要(或)启用处理功能。