JSF:如果转换失败,则调用方法

时间:2012-07-04 06:00:35

标签: java jsf facelets

在JSF中,如果在任何输入字段上转换失败,我如何调用方法?我想我可以编写自己的转换器并在那里做所有的事情,但是不是有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用PreRenderViewEvent侦听器,并在该方法中检查验证是否失败。每次在渲染视图之前都会调用此侦听器方法。

E.g。

考虑以下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;
    }

}

如果您在没有输入值的情况下按下按钮,您将看到“错误!”在您的控制台中打印,输入一个值,您将看到“成功!”。