我有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.xhtml
或third.xhtml
。
有人可以解释发生了什么以及如何解决这个问题吗?
答案 0 :(得分:2)
您需要设置#{firstBean}
一个@ViewScoped
bean而不是@RequestScoped
个bean。这样,您可以确保#{firstBean.srcForSecond}
在后续请求中对其进行评估。它即在表单提交的申请请求值阶段重新评估。如果它的计算方式不同,则无法找到最初包含的组件,也不会设置/调用任何内容。