我有一个基本的CRUD视图范围的bean。在setter方法中,我正在执行一些特定于数据的验证,如果其中任何一个发生错误,它会为每个setter构建详细的错误消息。
这很好用,但我想在每个请求上清空此错误消息,我不知道如何做到这一点。
preRenderView
不会删除它,因为此错误消息也需要呈现。像postRenderView
这样的东西是理想的。
答案 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}}