【问题标题】:JSF greater than zero validatorJSF 大于零的验证器
【发布时间】:2013-08-06 03:10:06
【问题描述】:

如何在 JSF 中创建一个验证器来验证输入文本是否大于零?

<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validateDoubleRange minimum="0.000000001"/>
</h:inputText>

我有上面的代码,但我不确定这是否是最佳的。虽然它可以工作,但如果需要另一个小于这个数字的数字,那么我需要再次更改 jsf 文件。 用例是任何大于零的都可以,但不是负数。

有什么想法吗?

【问题讨论】:

  • 这可能很有趣:kianworknotes.com/2013/06/…
  • 是的,使用最小值 = 0 的 validateDoubleRange 也允许为零,这也是我不喜欢的......
  • 好的,请在下面检查我的答案并告诉我(抱歉无法测试)。

标签: jsf jsf-2


【解决方案1】:

只需创建一个自定义验证器,即实现javax.faces.validator.Validator 的类,并使用@FacesValidator("positiveNumberValidator") 对其进行注释。

像这样实现validate() 方法:

@Override
public void validate(FacesContext context, UIComponent component,
        Object value) throws ValidatorException {

    try {
        if (new BigDecimal(value.toString()).signum() < 1) {
            FacesMessage msg = new FacesMessage("Validation failed.", 
                    "Number must be strictly positive");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg); 
        } 
    } catch (NumberFormatException ex) {
        FacesMessage msg = new FacesMessage("Validation failed.", "Not a number");
        msg.setSeverity(FacesMessage.SEVERITY_ERROR);
        throw new ValidatorException(msg); 
    }
}

并像这样在 facelets 页面中使用它:

<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validator validatorId="positiveNumberValidator" />
</h:inputText>

有用的链接:http://www.mkyong.com/jsf2/custom-validator-in-jsf-2-0/

【讨论】:

  • 感谢这是我的解决方案!
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 2020-04-15
  • 2013-07-25
  • 1970-01-01
  • 2010-11-13
  • 2016-07-29
  • 2011-04-28
相关资源
最近更新 更多