在JSF2中外化/集中验证属性

时间:2013-08-04 13:34:51

标签: validation jsf-2

这是JSF中具有validateLength验证器的输入字段的示例。

<p:inputText id="priceModelName" size="30"
    value="#{createPriceModelBackingBean.priceModel.priceModelName}"
    required="true" label="#{labelResource.priceModelName}">
    <f:validateLength minimum="3" maximum="45" />
</p:inputText>

priceModelName输入字段在另一个xhtml(create.xhtml和edit.xhtml)中重复,我希望将minimummaximum的值外部化/集中化,以便它没有重复。对这样的用例有好的建议吗?

我在考虑使用属性文件。

<f:validateLength minimum="#{validationResource.priceModel.minimum}" maximum="#{validationResource.priceModel.minimum}" />

1 个答案:

答案 0 :(得分:1)

除了你发现自己的方式外,另一种方法是:

  1. 扩展JSF LengthValidator并在构造函数中设置默认值。

    @FacesValidator("priceModelNameLengthValidator")
    public class PriceModelNameLengthValidator extends LengthValidator {
    
        public PriceModelNameLengthValidator() {
            setMinimum(3);
            setMaximum(45);
        }
    
    }
    

    (如果必要的常量或配置设置,请制作那些神奇的数字)

    并重复使用

    <f:validator validatorId="priceModelNameLengthValidator" />
    

  2. 使用JSR 303 bean验证。

    @Size(min=3, max=45)
    private String priceModelName;