1

JSFでは、入力フィールドのいずれかで変換が失敗した場合、どのようにメソッドを呼び出すことができますか? 私は自分のコンバーターを書いてそこですべてのことを行うことができると思いますが、もっと簡単な方法はありませんか?

4

1 に答える 1

2

リスナーを使用してPreRenderViewEvent、そのメソッドで検証が失敗したかどうかを確認できます。このリスナー メソッドは、ビューがレンダリングされる直前に毎回呼び出されます。

例えば

次の Facelet を検討してください。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
>
    <h:body>

        <h:messages/>

        <f:event listener="#{onErrorBean.onPreRenderView}" type="preRenderView" />

        <h:form>
            <h:inputText value="#{onErrorBean.test}" label="test" required="true" />

            <h:commandButton value="Submit" action="#{onErrorBean.onSuccess}" />
        </h:form>

    </h:body>
</html>

そして、次のバッキング Bean:

@ViewScoped
@ManagedBean
public class OnErrorBean {

    private String test;

    public void onPreRenderView() {
        if (FacesContext.getCurrentInstance().isValidationFailed()) {
            onError();
        }
    }

    public void onSuccess() {
        System.out.println("Success!");
    }

    public void onError() {
        System.out.println("Error!");
    }

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }

}

値を入力せずにボタンを押すと、「Error!」と表示されます。コンソールに出力されたら、値を入力すると「成功!」と表示されます。

于 2012-07-04T09:05:48.897 に答える