1

问:使用 primefaces 提交表单时,我应该使用什么语法来排除组件?

使用 process 属性我知道如何包含组件。

<h:inputText id="included"/>
<p:commandButton value="button" process="included" actionListener="#{myBean.doStuff}/>

我一直在尝试使用与此处答案中使用的语法类似的语法:如何在父组件的 ajax 更新中排除子组件?但不能让它工作

<h:inputText id="notIncluded" styleClass="notIncluded"/>
<p:commandButton ... process="@(form :not(.notIncluded))"/>

编辑(做作业并添加一个实际的工作示例):在 glassfish 3.1.2.2 和 primefaces 3.4.2 上

当我进一步观察时,排除在 h:panelGrid 内工作正常

<h:form id="aForm">
    <h:panelGrid columns="2">
        <p:inputText id="inc" styleClass="included" required="true" />
        <p:message for="inc" />
        <p:inputText id="notInc" styleClass="notIncluded" required="true" />
        <p:message for="notInc" />

        <p:commandButton value="submit" process="@(form :not(.notIncluded))"
            update=":aForm" />
    </h:panelGrid>
</h:form>

但不再排除在类似的 p:panelGrid 中

<h:form id="aForm">
    <p:panelGrid columns="2">
        <p:inputText id="inc" styleClass="included" required="true" />
        <p:message for="inc" />
        <p:inputText id="notInc" styleClass="notIncluded" required="true" />
        <p:message for="notInc" />

        <p:commandButton value="submit" process="@(form :not(.notIncluded))"
            update=":aForm" />
    </p:panelGrid>
</h:form>
4

1 回答 1

4

我已经检查了您的示例,如果您查看页面源代码,您会注意到p:panelGrid创建带有 id 的表。有点奇怪,但是当表格有 id 时, jQuery 选择器不会访问子项。如果我删除表 ID,则按钮可以正常工作。所以我的解决方案是给一个 idpanelGrid并在选择器中使用这个 id。p:panelGrid将为表提供相同的 id,但您需要确保将prependId="false"属性添加到 h:form 中:

<h:form id="aForm" prependId="false">
    <p:panelGrid columns="2" id="myGrid">
        <p:inputText id="inc" styleClass="included" required="true" />
        <p:message for="inc" />
        <p:inputText id="notInc" styleClass="notIncluded" required="true" />
        <p:message for="notInc" />

        <p:commandButton value="submit" process="@(#myGrid :not(.notIncluded))"
            update=":aForm" />
    </p:panelGrid>
</h:form>
于 2012-12-30T04:26:02.630 回答