我有一个基本的 CRUD View 范围 bean。在 setter 方法中,我正在执行一些特定于数据的验证,如果其中任何一个发生错误,它会为每个 setter 构建详细的错误消息。
这工作正常,但我想在每次请求时清空此错误消息,但我不知道该怎么做。
preRenderView
不会剪切它,因为这个错误消息也需要被渲染。像 postRenderView
这样的东西是理想的。
最佳答案
您不应在 setter 方法中执行验证,也不应将验证消息存储在辅助 bean 中。您的整个问题只是由于糟糕的设计而不是利用 JSF 提供的验证工具造成的。
只需利用 JSF 提供的验证工具,而不是完全绕过它,到目前为止所描述的所有问题都会消失。您可以使用多个 JSF 内置 validator ,例如 required="true"
, validator="javax.faces.XxxValidator
, <f:validateXxx>
输入组件上的标签等。您可以通过实现 Validator
创建自定义 validator 接口(interface)并给它一个你在 validator="myValidator"
中使用的唯一 validator ID或 <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>
另见:
关于java - 有没有一种方法可以在 JSF 的 View 范围 bean 中为每个请求调用某些东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11723842/