有没有办法在JSF中的视图范围bean中为每个请求调用一些东西?

时间:2012-07-30 14:45:29

标签: java validation jsf jsf-2

我有一个基本的CRUD视图范围的bean。在setter方法中,我正在执行一些特定于数据的验证,如果其中任何一个发生错误,它会为每个setter构建详细的错误消息。

这很好用,但我想在每个请求上清空此错误消息,我不知道如何做到这一点。 preRenderView不会删除它,因为此错误消息也需要呈现。像postRenderView这样的东西是理想的。

1 个答案:

答案 0 :(得分:3)

您不应在setter方法中执行验证,也不应将验证消息存储在辅助bean中。你的整个问题只是由糟糕的设计引起的,而不是利用JSF提供的验证工具。

只需利用JSF提供的验证工具,而不是完全解决它,到目前为止所描述的所有问题都将消失。您可以在输入组件上使用多个JSF内置验证器,例如required="true"validator="javax.faces.XxxValidator<f:validateXxx>标签等。您可以通过实施Validator界面并为其提供唯一的验证程序ID来创建自定义验证程序,您可以在validator="myValidator"<f:validator validatorId="myValidator">中使用该验证程序。

使用JSF标准验证时,任何验证错误都将作为ValidatorException在请求范围内以FacesMessage抛出,该<h:message>将显示在与该组件关联的<h:form> <h:inputText id="foo" required="true" requiredMessage="Enter this!" /> <h:message for="foo" /> <h:commandButton value="Submit" /> </h:form> 中。这样,消息将在后续请求中“自动”消失。

这是一个非常基本的启动示例:

{{1}}

另见: