1

ユーザーの詳細を尋ねる PrimeFaces ダイアログがあります。以下のような入力テキストが 1 つだけになるように簡略化しました。

<p:dialog>
        <h:form  prependId="false">
            <p:growl showDetail="false" autoUpdate="true"  life="4000"/>
            <p:panelGrid columns="2">
                <h:outputText value="First Name" />
                <p:inputTextarea  required="true" requiredMessage="First Name is required!" />
                <p:commandButton value="Add" actionListener="#{myBean.addUser}"/>
            </p:panelGrid>
        </h:form>
</p:dialog>

required="true"名を入力しないと、アクション リスナーが呼び出されないことに気付きました。これは、検証が既に行われているため、正常だと思います。

アクションリスナーがまだ呼び出される場所で、これを構成する方法はありますか? または、チェックを削除して、required="true"すべての検証をアクション リスナー メソッドに入れる必要がありますか?

4

2 に答える 2

2

actionListenerの値に関係なくメソッドを呼び出したい場合は<p:inputTextarea/>、 を削除required="true"してアクション メソッドで検証を行います。

   public void addUser() {

       if(StringUtils.isBlank(user.firstName)) {
           FacesContext.getCurrentInstance().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error! ",
                "First Name is required!"));
           return;
       }
   }

import org.apache.commons.lang3.StringUtils からの isBlank;

無関係:

私の意見では、このアプローチは悪い考えのようです。

于 2012-11-07T07:54:12.413 に答える
2

検証ロジックをアクション メソッドに入れるべきではありません。

必要なチェックよりも多くの検証を行う必要がある場合は、カスタム バリデーターを使用してください。アクション メソッドは単純にユーザーを追加する必要があり、jsf 検証フェーズに依存する必要があります。

詳細については、さまざまな検証オプションに関するこのリンクを参照してください。

于 2012-11-07T07:52:09.753 に答える