【问题标题】:Showing JSF validation errors for several fields with more than h:message显示多个超过 h:message 的字段的 JSF 验证错误
【发布时间】:2018-07-18 13:01:44
【问题描述】:

对多个输入字段进行验证的表单应显示时尚的错误消息,并在消息前面带有一个图标,并包含在红色框中。

包含图标和消息的 h:panelGroup 必须仅在出现错误时才呈现。

只需一个经过验证的输入字段即可:

<h:panelGroup rendered="#{facesContext.validationFailed}"

但如果输入字段不止一个,则所有错误面板组都是可见的,即使是那些没有错误但只显示红色框中的图标的错误面板组。

【问题讨论】:

  • 在您的示例中,我只看到一个。如果有更多的 panelGroup 并且所有看起来都像 &lt;h:panelGroup rendered="#{facesContext.validationFailed}" 它们都将表现相同。
  • 是的,不止一个。那么我可以为渲染属性使用什么表达式来使它们的行为与需要的不同

标签: validation jsf rendering


【解决方案1】:

我现在的解决方案是为每个输入设置一个验证器,并为每个验证器添加一个属性“validationFailed”。

<p:inputNumber id="mileage" validator="#{mileageValidator.validate}"></p:inputNumber>
<h:panelGroup rendered="#{mileageValidator.validationFailed}" styleClass="wizard-alert-box">
    <div class="wizard-alert-content-margin">
        <h:graphicImage name="attention.png"/>
        <h:message id="invalid-mileage" for="mileage" showSummary="true" showDetail="false"/>
    </div>
</h:panelGroup>

<p:calendar id="date" validator="#{dateValidator.validate}"></p:calendar>
<h:panelGroup rendered="#{dateValidator.validationFailed}" styleClass="wizard-alert-box">
    <div class="wizard-alert-content-margin">
        <h:graphicImage name="attention.png"/>
        <h:message id="invalid-date" for="date" showSummary="true" showDetail="false"/>
    </div>
</h:panelGroup>

这里是验证器之一:

@Named("mileageValidator")
public class MileageValidator {

    @Getter
    private boolean validationFailed;

    public void validate(FacesContext context, UIComponent component, Object value) {
        validationFailed = value == null;
        if (validationFailed) {
            throw new ValidatorException(new FacesMessage("mileage empty"));
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多