1

required是否可以用布尔 EL 表达式填充属性的值?我有一个表单,其中qtyInput仅当描述输入 ( descInput) 不为空时才需要数量输入 ( )。我试着这样做:

<h:form id="form">
        <p:dataTable var="item" value="#{someController.list}" id="table">
            <p:column>
                <f:facet name="header" >
                    <h:outputText value="Description"/>
                </f:facet>
                <p:inputText value="#item.description}" id="descInput"  />
                <p:message for="descInput" />
            </p:column>
            <p:column>
                <f:facet name="header" >
                    <h:outputText value="Quantity"/>
                </f:facet>
                <p:inputText value="#{item.quantity}" required="#{not empty item.description}" id="qtyInput"/>
                <p:message for="qtyInput" />
            </p:column>

        </p:dataTable>
        <p:commandButton id="saveButton" value="Save" action="#{someController.save()}"/>
</h:form>

但它没有用。是否可以仅使用 EL 来执行此操作,还是应该实现自定义验证器?

4

2 回答 2

1

是的,有可能。您的问题只是由于时间错误造成的。在您当前的尝试中,

<p:inputText ... value="#{item.description}" />
<p:inputText ... value="#{item.quantity}" required="#{not empty item.description}" />

#{item.description}仅在更新模型值阶段设置,而在required验证阶段评估属性,这是之前的一个阶段。因此,您正在检查当时尚不可用的值。

您需要检查组件的值而不是模型值。您可以通过将组件绑定到视图然后访问UIInput#getValue().

<p:inputText ... binding="#{descComponent}" value="#{item.description}" />
<p:inputText ... value="#{item.quantity}" required="#{not empty descComponent.value}" />

请注意,组件是按照它们在组件树中出现的顺序进行处理的,因此如果您反过来使用上述组件,那么它也会失败。您需要改为检查组件的提交值UIInput#getSubmittedValue()

<p:inputText ... value="#{item.quantity}" required="#{not empty descComponent.submittedValue}" />
<p:inputText ... binding="#{descComponent}" value="#{item.description}" />
于 2012-12-10T11:15:18.750 回答
0

BalusC 编写的替代方法是使用 PrimeFaces p:ajax

<p:inputText ...id="itemDescription" value="#{item.description}">
    <p:ajax event="blur" partialSubmit="true" update="itemQuantity" />
</input>
<p:inputText ...id="itemQuantity" value="#{item.quantity}" required="#{not empty item.description}" />

在我看来它看起来很优雅,唯一的缺点是在 itemQuantity 中输入的任何内容,在修改 itemDescription 后都将重置为 bean 的值(如果是这种情况,则重置为无值)。另外,也许您可​​以使用 BalusC 的库 omnifaces,它提供了一些 validateAllOrNone 验证器,尽管我从未使用过。

爱德华

于 2012-12-10T12:14:06.010 回答