java - 有没有一种方法可以在 JSF 的 View 范围 bean 中为每个请求调用某些东西?

标签 java validation jsf jsf-2

我有一个基本的 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/

相关文章:

eclipse - 停止 Eclipse 在文件保存时重新启动我的 Web 应用程序

java - 如何使用jsf进行数据表过滤?

java - JTextField 仅将输入限制为某些字符

java - JSF:在特定 URL 上立即执行 bean 而不是 xhtml 文件

java - 调用 loadAd 之前必须在 InterstitialAd 上设置广告单元 ID 错误

java - 在卡片布局中切换卡片后运行方法

validation - Angular 2 和 4 中的动态模式验证

javascript - 禁用未选中的 radio 的提交按钮不工作

java - JTextField 输入无法更新 MVC 中 TextView 中的输出

java - Spring + hibernate : how can I tell if spring has picked up all the @transactional annotation