Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF大于零验证程序_Jsf_Jsf 2 - Fatal编程技术网

JSF大于零验证程序

JSF大于零验证程序,jsf,jsf-2,Jsf,Jsf 2,如果输入文本大于零,如何在JSF中创建验证程序来验证输入文本 <h:inputText id="percentage" value="#{lab.percentage}"> <f:validateDoubleRange minimum="0.000000001"/> </h:inputText> 我有上面的代码,但我不确定这是否是最佳的。虽然它可以工作,但是如果需要比这个小的数字,那么我需要再次更改jsf文件。 用例是任何大于零的都可以,但不是负

如果输入文本大于零,如何在JSF中创建验证程序来验证输入文本

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

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


有什么想法吗?

只需创建一个自定义验证器,即实现的类,并用
@FacesValidator(“positiveEnumberValidator”)
对其进行注释

执行
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); 
    }
}
<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validator validatorId="positiveNumberValidator" />
</h:inputText>
@覆盖
公共无效验证(FacesContext上下文、UIComponent组件、,
对象值)引发异常{
试一试{
if(新的BigDecimal(value.toString()).signum()<1){
FacesMessage msg=新的FacesMessage(“验证失败”,
“数字必须严格为正”);
消息设置严重性(FacesMessage.SEVERITY_错误);
抛出新的验证异常(msg);
} 
}捕获(NumberFormatException ex){
FacesMessage msg=新的FacesMessage(“验证失败”,“不是数字”);
消息设置严重性(FacesMessage.SEVERITY_错误);
抛出新的验证异常(msg);
}
}
并在facelets页面中使用它,如下所示:

@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); 
    }
}
<h:inputText id="percentage" value="#{lab.percentage}">
    <f:validator validatorId="positiveNumberValidator" />
</h:inputText>


有用的链接:

这可能会引起兴趣:是的,使用ValidateDubrerange(最小值=0)将允许零,这也是我不喜欢的…好的,请检查我下面的答案并让我知道(抱歉无法测试)。谢谢这是我的解决方案!