我正在使用primefaces并处理复杂的表单。我需要隐藏表单的一部分,具体取决于复选框的值
<p:selectBooleanButton id="input1" .... />
<p:inputText id="input2" />
<!-- the boolean checkbox -->
<p:selectBooleanCheckbox id="checkBox1" value="#{bbean.someBoolValue}" >
<p:ajax event="change" update=":#{p:component('someParentcComponentsId')}" />
</p:selectBooleanCheckbox>
<!-- some input fields here. These will be rendered depending checkBox1 value -->
<p:panel rendered="#{bbean.someBoolValue}" id="hiddingPanel">
<h:panelGrid columns="2" >
<p:inputText id="input3" />
</h:panelGrid>
</p:panel>
到目前为止,我已经完成了这项工作,所以当点击checkBox1
时,hiddingPanel
会被显示或隐藏。但是有一个问题:该形式的每个输入的值(例如input1
,input2
)都会丢失,因为'更改'ajax事件没有提交它们的值。
在更新表单之前,如何确保提交所有输入值?
答案 0 :(得分:7)
只需确保您只更新 真正需要更新的部分
。<p:selectBooleanCheckbox id="checkBox1" value="#{bbean.someBoolValue}" >
<p:ajax event="change" update="hiddingPanel" />
</p:selectBooleanCheckbox>
<!-- some input fields here. These will be rendered depending checkBox1 value -->
<p:panel id="hiddingPanel">
<h:panelGrid columns="2" rendered="#{bbean.someBoolValue}">
<p:inputText id="input3" />
</h:panelGrid>
</p:panel>
请注意,我已将rendered
移至其直接子项,原因如下所示:Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?