如何在JSF中创建一个验证器,验证输入文本是否大于零?
<h:inputText id="percentage" value="#{lab.percentage}">
<f:validateDoubleRange minimum="0.000000001"/>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
我有上面的代码,但我不确定这是否是最佳的.虽然它可以工作,但如果需要另一个小于此的数字,那么我需要再次更改jsf文件.用例是任何大于零的东西都可以,但不是负数.
有什么想法吗?
只需创建一个自定义验证器,即一个实现的类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);
}
}
Run Code Online (Sandbox Code Playgroud)
并在facelets页面中使用它,如下所示:
<h:inputText id="percentage" value="#{lab.percentage}">
<f:validator validatorId="positiveNumberValidator" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
有用的链接:http://www.mkyong.com/jsf2/custom-validator-in-jsf-2-0/
| 归档时间: |
|
| 查看次数: |
7197 次 |
| 最近记录: |