【问题标题】:<ui:include> with dynamic src does not invoke setters on backingbean具有动态 src 的 <ui:include> 不会在 backingbean 上调用 setter
【发布时间】:2011-07-20 17:01:55
【问题描述】:

我有一个first.jsf,其中包含second.xhtml,方式如下:

<ui:include src="#{firstBean.srcForSecond}" />

这可以正常工作并呈现second.jsf 的内容。我使用 EL 包含它,因为包含的内容会根据某些条件发生变化。

我的second.xhtml 包含一个简单的输入文本框:

<h:inputText id="firstname" value="#{secondBean.firstName}" />

当我加载页面时,名字的值会正确呈现。但是,当我更改文本框中的值并提交时,永远不会调用支持 bean 上的设置器。

但是,如果我按以下方式更改 ui:include,它会起作用:

<ui:include src="second.xhtml" />

但是,我需要使用 EL 表达式,因为根据某些条件它可能是 second.xhtmlthird.xhtml

谁能解释发生了什么以及如何解决它?

【问题讨论】:

  • 我认为这里缺少一些信息。你有什么想要包含的代码吗?
  • @Feanor:OP 输入了有问题的 XML 代码,而不是使用代码格式(缩进 4 个空格),这导致它变得不可见。我已修复问题中的代码格式,使其可见。

标签: jsf jsf-2 facelets


【解决方案1】:

您需要将#{firstBean} 设为@ViewScoped bean,而不是@RequestScoped。这样,您可以确保 #{firstBean.srcForSecond} 在后续请求中评估相同。即在表单提交的应用请求值阶段重新评估。如果它的评估不同,则无法定位最初包含的组件,并且不会设置/调用任何内容。

【讨论】:

  • 就是这样!我的 firstBean.srcForSecond 方法没有返回一致的结果。非常感谢您的回复。
猜你喜欢
  • 2013-12-05
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多