【问题标题】:JSF PrimeFaces overlayPanel submit valueJSF PrimeFaces overlayPanel 提交值
【发布时间】:2013-05-29 01:52:36
【问题描述】:

我想从 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

【问题讨论】:

  • it sets "false" to bean boolean value again. 是什么意思?布尔值在任何时候都是 true 还是非原始 Boolean
  • 首先,通过勾选复选框上的 ajax 事件将 bean 布尔值设置为“true”,但之后按下“提交”按钮以传输更多表单数据 - 它尝试将“false”设置为bean 布尔变量。
  • 可以发一下treeBean.applyJoinOptions的代码吗?
  • 这里没什么有趣的,只是迭代包含布尔值的 POJO 列表。

标签: jsf primefaces


【解决方案1】:

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

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

编辑

我在 overlayPanel 中添加了&lt;h:form&gt;,现在可以正常工作了:

<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 2013-07-23
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2013-03-17
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多