动态src的<ui:include>不会在backingbean </ui:include>上调用setter

时间:2011-03-22 17:35:36

标签: jsf jsf-2 facelets

我有first.jsf,其中我以下列方式添加second.xhtml

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

此工作正常并呈现second.jsf的内容。我根据某些条件使用EL作为包含的内容更改。

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

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

当我加载页面时,firstname的值会正确呈现。但是,当我更改文本框中的值并提交时,永远不会调用辅助bean上的setter。

但是,如果我按以下方式更改ui:include,则可以:

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

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

有人可以解释发生了什么以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您需要设置#{firstBean}一个@ViewScoped bean而不是@RequestScoped个bean。这样,您可以确保#{firstBean.srcForSecond}在后​​续请求中对其进行评估。它即在表单提交的申请请求值阶段重新评估。如果它的计算方式不同,则无法找到最初包含的组件,也不会设置/调用任何内容。