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 でのみこれを行うことは可能ですか、それともカスタム Validator を実装する必要がありますか?

4

2 に答える 2

1

はい、可能です。あなたの問題は、間違ったタイミングが原因です。現在の試みでは、

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

これ#{item.description}はモデル値の更新フェーズでのみ設定され、required属性は 1 つ前のフェーズである検証フェーズで評価されます。したがって、その時点ではまだ利用できない値をチェックしています。

モデル値ではなく、コンポーネントの値を確認する必要があります。コンポーネントをビューにバインドしてから にアクセスすることで取得できます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 の値 (またはその場合は値なし) にリセットされることです。また、まだ使用したことがありませんが、validateAllOrNone バリデーターを提供する BalusC のライブラリ omnifaces を使用することもできます。

エデュアルド

于 2012-12-10T12:14:06.010 に答える