我有一个基本的 CRUD 视图范围 bean。在 setter 方法中,我正在执行一些特定于数据的验证,如果其中任何一个 setter 发生错误,它会为每个 setter 构建详细的错误消息。
这工作正常,但我想在每个请求上清空这个错误消息,我不知道我会怎么做。
preRenderView
不会削减它,因为此错误消息也需要呈现。像 apostRenderView
这样的东西是理想的。
我有一个基本的 CRUD 视图范围 bean。在 setter 方法中,我正在执行一些特定于数据的验证,如果其中任何一个 setter 发生错误,它会为每个 setter 构建详细的错误消息。
这工作正常,但我想在每个请求上清空这个错误消息,我不知道我会怎么做。
preRenderView
不会削减它,因为此错误消息也需要呈现。像 apostRenderView
这样的东西是理想的。
您不应在 setter 方法中执行验证,也不应将验证消息存储在支持 bean 中。您的整个问题只是由糟糕的设计和没有使用 JSF 提供的验证工具引起的。
只需使用 JSF 提供的验证工具,而不是完全围绕它工作,到目前为止所描述的所有问题都会消失。您可以在输入组件上使用多个 JSF 内置验证器,例如required="true"
、validator="javax.faces.XxxValidator
、<f:validateXxx>
标签等。Validator
您可以通过实现接口并为其提供您在validator="myValidator"
or中使用的唯一验证器 ID来创建自定义验证器<f:validator validatorId="myValidator">
。
使用 JSF 标准验证时,任何验证错误都将在请求范围内以ValidatorException
带有 a的形式抛出,FacesMessage
该范围将显示在<h:message>
与组件关联的 a 中。这样,消息将在后续请求中“自动”消失。
这是一个非常基本的启动示例:
<h:form>
<h:inputText id="foo" required="true" requiredMessage="Enter this!" />
<h:message for="foo" />
<h:commandButton value="Submit" />
</h:form>