4

JSF 2.0では、どうすれば必要なメッセージを上書きできますか?Primefacesを使用しています。これが私のコードです:

<h:body>
    <p:growl id="growl" showDetail="true"/>
    <h:panelGroup layout="block" styleClass="login-div">
        <h:form id="login">
            <p:panel header="Login">
                <h:panelGrid columns="2">
                    <p:outputLabel for="username" value="Username" />
                    <p:inputText id="username" value="#{authController.username}"
                        autocomplete="off" required="true"
                        requiredMessage="Username is required" />
                    <p:outputLabel for="password" value="Password" />
                    <p:password id="password" value="#{authController.password}"
                        autocomplete="off" required="true"
                        requiredMessage="Password is required" />
                </h:panelGrid>
                <p:commandButton id="submit" value="Login"
                    actionListener="#{authController.login}" update=":growl" />
            </p:panel>          
        </h:form>
    </h:panelGroup>
    <p:ajaxStatus styleClass="ajaxLodingStatus">
        <f:facet name="start">
            <p:graphicImage value="/resources/images/loading.gif" />
        </f:facet>
        <f:facet name="complete">
            <p:outputLabel value="" />
        </f:facet>
    </p:ajaxStatus>
</h:body>

これGrowlで、概要と詳細の両方として「ユーザー名が必要です」と表示されFacesMessageます。これはパスワードフィールドでも同じです。

これactionListenerで、コマンドボタンのから、ログインの試行が失敗したときに、希望する方法で表示されます。

getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid Credential"));

ただし、概要として「無効な入力」、詳細として「ユーザー名が必要」を表示したいと思います。

バックエンドからこれらの2つの入力フィールドを検証し、次のように追加すると、次のFacesMessageようになります。

if(username == null || username.trim().length() == 0) {
    getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Invalid input", "Username is required."));
}

それは私が必要なものを示しています。required="true"ただし、入力コンポーネントで属性を指定する必要はありません。

しかし、この属性を使用したいのですが、での表示required方法もカスタマイズしたいと思います。これどうやってするの?FacesMessageGrowl


アップデート:

これが私のバッキングBeanです:

@ManagedBean(name = "authController")
@ViewScoped
public class AuthController extends BaseWebController implements Serializable {

    private static final long serialVersionUID = 2894837128903597901L;

    private String username;
    private String password;

    public AuthController() {
        super();
    }

    public void login(ActionEvent event) {
        getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid Credential"));
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

そして現在、actionaListenerいくつかの入力がある場合にのみ発火しています。それ以外の場合、フィールドが空白の場合、Growlは次のように表示されます。

ここに画像の説明を入力してください

そして、ログインボタンをクリックした後:

ここに画像の説明を入力してください

ショーケースに示されているように

私が欲しいのは、入力されたユーザー名が必要に応じて検証に失敗した場合、次のGrowlように表示されます。

  • 概要:入力が無効です。
  • 詳細:ユーザー名が必要です。

そして、入力パスワードについては:

  • 概要:入力が無効です。
  • 詳細:パスワードが必要です。

どうすればこれを達成できますか?出来ますか?

4

2 に答える 2

12

私は解決策を見つけました:

検証エラーメッセージをカスタマイズする必要があります。

私が書いたmessages.propertiesファイルを作成しました:

javax.faces.component.UIInput.REQUIRED=Invalid input.
javax.faces.component.UIInput.REQUIRED_detail={0} is required.

そしてそれをfaces-configに次のように登録しました:

com.edfx.adb.common.properties.messages

そして私はこれを手に入れました:

ここに画像の説明を入力してください

requiredMessageまた、入力コンポーネントから属性を削除しました。

いくつかの便利なリンク:

于 2012-12-08T18:19:38.947 に答える
1

は要素requiredMessageで表示されます。p:message唸り声のメッセージを表示したい場合は、すでに答えが見つかりました。

の使用方法p:messageについては、PrimeFacesショーケースをご覧ください。

于 2012-12-08T13:38:25.127 に答える