我有一个基于下拉菜单有条件地呈现的字段。所有这些都没有问题,但是当我提交新呈现的组件应该属于的表单时,它不会被提交。
代码相当简单:
<h:form id="form">
<p:layout id="layout">
...
<p:layoutUnit id="layoutUnit">
...
<p:panel id="panel">
<p:outputPanel id="container1">
<p:selectOneMenu id="value1" value="#{bean.value1}">
<f:selectItem itemValue="1"/>
<f:selectItem itemValue="2"/>
<f:selectItem itemValue="3"/>
<f:selectItem itemValue="18"/>
<p:ajax event="change" update="container2"/>
</p:selectOneMenu>
</p:outputPanel>
<p:outputPanel id="container2">
<p:inputText id="value2"
value="#{bean.value2}"
rendered="#{bean.value1 eq 18}"
>
</p:inputText>
</p:outputPanel>
</panel>
<div id="buttons">
<p:commandButton id="commandButton" action="#{bean.save}" value="save" />
</div>
</layoutUnit>
</layout>
</form>
尝试了可能的解决方案:
- JSF 的 @ViewScoped 不可用,因为它与 CDI 冲突
我可以想到一些导致这种行为的场景:
- “渲染”似乎是根据支持 bean 中的值重新评估,而不是 UI 中给出的新值(如果它默认为 1,则在提交时再次为 1,而不是 18)。因此该组件不会被提交。
- 添加的组件未正确添加到表单中,因此未提交。
- ?
选项 1 似乎是最有可能的,但有人能指出我正确的方向吗?
我使用 WAS8.5(所以 JSF2.0)、Primefaces 和 CDI。