validation - 添加字段验证失败时的全局消息

标签 validation jsf primefaces

通常,消息的 PrimeFaces 标签显示全局消息以及特定于字段的消息。我想要做的是只显示全局消息 (globalOnly="true"),但如果任何字段的验证失败,也会显示一条常见消息。无论有多少字段失败,都只会出现一条消息,例如“请更正您的数据”。字段特定错误已显示在输入字段旁边,因此无需显示两次。

我为每个输入使用复合组件(TextboxDropdownRadios,...)。每个字段的验证应该在文本框的 blur 上完成,对于下拉列表和单选框可能在 valuechanged 上完成。

现在我想要处理两种类型的验证。首先是JSF本身带来的标准验证器。例如 required="true",还有 validateRegexvalidateLength、...

然后我必须根据另一个后端检查一些值。对于那些我可能会在我的 bean 中创建方法并将它们称为我的监听器

<p:inputText id="#{cc.attrs.name}"
             value="#{cc.attrs.val}"
             styleClass="#{cc.attrs.iconClass}"
             required="#{cc.attrs.required}"
             requiredMessage="#{cc.attrs.requiredMessage}">
    <p:ajax event="blur" process="@form" update="outer-wrapper" 
            listener="#{cc.attrs.someValidationMethod}" />
</p:inputText>

所以基本上,如果任何字段验证失败,我只想收到一条全局消息。我知道可以使用 rendered="#{facesContext.validationFailed}" 渲染一个附加框,但我更喜欢有一个全局消息。是否有开箱即用的设置或者必须实现?

最佳答案

我使用phase listener这样做。这大致是我的实现(使用 OmniFaces ):

public class ValidationFailedListener implements PhaseListener {

  @Override
  public PhaseId getPhaseId() {
    return PhaseId.RENDER_RESPONSE;
  }

  @Override
  public void beforePhase(PhaseEvent event) {
    if (Faces.isValidationFailed()) {
      Messages.addGlobalError("Your validation failed message");
    }
  }

  @Override
  public void afterPhase(PhaseEvent event) {
    // NOOP
  }

}

您应该在您的faces-config.xml中注册它:

<lifecycle>
  <phase-listener>your.ValidationFailedListener</phase-listener>
</lifecycle>

我的实际实现使用消息包来显示本地化消息。


如果您无法使用 OmniFaces,这里是使用普通 JSF 的相关代码:

if (FacesContext.getCurrentInstance().isValidationFailed()) {
  FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                          "Your validation failed message",
                                          null);
  FacesContext.getCurrentInstance().addMessage(null, message);
}

关于validation - 添加字段验证失败时的全局消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247737/

相关文章:

ios - 验证失败时防止光标移动

ajax - 重新渲染时,primefaces 编辑器显示为 true

java - 无法绑定(bind) rich :dataTable

jsf-2 - 如何在运行时初始化 jsf 2.0 文本字段?

hibernate - 由 : javax. validation.ConstraintViolationException 引起:类验证失败

ASP.NET 多形式验证

javascript - 如何从我的 Eclipse 项目中删除 javascript 验证?

Spring bean 未注入(inject) JSF 托管 bean(这是一个抽象父类(super class))

java - primefaces 折线图的问题

javascript - 如何设置 p :selectBooleanCheckbox with JavaScript 的值