1

我想用这样的复选框从overlayPanel向bean提交值表单jsf页面: 在此处输入图像描述

要显示覆盖面板和 ajax 提交,我使用此代码,并在调试器中查看它是可以的:

<p:commandButton id="joinBtn" value="Basic" type="button" disabled="#{dataPropertyCurrent.notJoinable}"/>
<p:overlayPanel id="joinPanel" for="joinBtn" appendToBody="true" dynamic="false">
    <f:facet name="header">Details</f:facet>
    <p:dataList value="#{treeBean.getDataPropsCouldBeJoinedWith(dataPropertyCurrent)}" type="definition" var="dataJoinVal">
        <h:panelGrid columns="2" cellpadding="10">
            <h:column>
                <p:selectBooleanCheckbox value="#{dataJoinVal.checked}" id="cbID">
                    <p:ajax event="change" update="cbID" partialSubmit="true"/>
                </p:selectBooleanCheckbox>
            </h:column>
            <h:column>
                <h:outputText value="#{dataJoinVal.caption}" />
            </h:column>
        </h:panelGrid>
    </p:dataList>
    <!--<p:commandButton  value="Apply" id="btnApplyJoin" type="button" process="@parent" />-->
    <h:outputLabel value="ID: #{dataPropertyCurrent.joinDataPropertyId}" />
</p:overlayPanel>

但是在它之后,当overlayPanel被隐藏并使用此代码按下表单提交按钮时:

<p:commandButton value="Apply join" update="joinAccordionPanel,dsAccordionPanelMain" actionListener="#{treeBean.applyJoinOptions}" />
  • 它再次将“false”设置为 bean 布尔值。

那么如何正确地将overlayPanel值提交给bean呢?

PrimeFaces 版本:3.5

4

1 回答 1

1

我在这里找到了解释: http: //forum.primefaces.org/viewtopic.php?f =3&t=30550#p97737 :

“如果您使用 appendToBody,强烈建议在 overlayPanel 组件中包含一个表单,该表单包含所有输入字段和按钮。这是您在上一个解决方案中所做的。但是,这意味着您不能将 overlayPanel 放在里面由于嵌套表单的限制,xhtml 页面中的另一个表单。最好的解决方案通常是在不是绝对必要的地方避免 appendToBody。

编辑

我已经<h:form>在overlayPanel中添加了,现在它工作正常:

<p:overlayPanel id="joinPanel" for="joinBtn" appendToBody="true" dynamic="true" >
    <h:form id="formTmp">
    <f:facet name="header">Details</f:facet>
    <p:dataList value="#{treeBean.getDataPropsCouldBeJoinedWith(dataPropertyCurrent)}" type="definition" var="dataJoinVal">
        <h:panelGrid columns="2" cellpadding="10">
            <h:column>
                <p:selectBooleanCheckbox value="#{dataJoinVal.checked}" id="cbID">
                    <p:ajax event="change" update="cbID" partialSubmit="true"/>
                </p:selectBooleanCheckbox>
            </h:column>
            <h:column>
                <h:outputText value="#{dataJoinVal.caption}" />
            </h:column>
        </h:panelGrid>
    </p:dataList>
    </h:form>
</p:overlayPanel>
于 2013-06-02T22:49:09.810 回答