如何从p:selectBooleanCheckbox更改事件提交表单

时间:2013-11-19 08:58:22

标签: ajax jsf-2 primefaces

我正在使用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会被显示或隐藏。但是有一个问题:该形式的每个输入的值(例如input1input2)都会丢失,因为'更改'ajax事件没有提交它们的值。

在更新表单之前,如何确保提交所有输入值?

1 个答案:

答案 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?