【问题标题】:Is there a way I can invoke something per request in a view scoped bean in JSF?有没有办法可以在 JSF 的视图范围 bean 中调用每个请求的内容?
【发布时间】:2012-07-28 06:13:22
【问题描述】:

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

这很好用,但我想在每个请求上清空此错误消息,但我不知道该怎么做。 preRenderView 不会删掉它,因为这个错误信息也需要渲染。像postRenderView 这样的东西是理想的。

【问题讨论】:

标签: java validation jsf jsf-2


【解决方案1】:

您不应在 setter 方法中执行验证,也不应将验证消息存储在支持 bean 中。您的整个问题只是由糟糕的设计和没有使用 JSF 提供的验证工具引起的。

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

使用 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>

另见:

【讨论】:

  • 是的,在我写下这个问题的那一刻,我就记得 JSF 提供了验证器,并意识到我走错了方向。非常感谢您的回答!
猜你喜欢
  • 2011-11-11
  • 2011-08-15
  • 1970-01-01
  • 2012-02-11
  • 2013-08-26
  • 1970-01-01
  • 2011-09-02
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多