【发布时间】:2015-08-23 07:02:05
【问题描述】:
我想在 JSF 应用程序中使用自定义验证器来验证用户的输入数据。插入的数据必须是 2 到 5 位之间的数字。
小脸
<h:inputText id="num1" label="num1" required="true" size="5" maxlength="5"
styleClass="#{component.valid ? '' : 'validation-failed'}"
value="#{sumaManagedBean.number1}"
requiredMessage="You must enter a value">
<f:validator validatorId="validators.NumberValidator"/>
</h:inputText>
<h:message for="num1" />
托管豆
@ManagedBean
@SessionScoped
public class SumaManagedBean implements Serializable
{
int number1;
public SumaManagedBean() {
}
//Getters and Setters
public int getNumber1() {
return number1;
}
public void setNumber1(int number1) {
this.number1 = number1;
}
//Methods
}
验证器
@FacesValidator("validators.NumberValidator")
public class NumberValidator implements Validator
{
private static final String NUMBER_PATTERN = "[0-9]{1,5}";
private Pattern pattern;
private Matcher matcher;
public NumberValidator()
{
pattern = Pattern.compile(NUMBER_PATTERN);
}
@Override
public void validate(FacesContext context, UIComponent component,Object value) throws ValidatorException
{
String number = value.toString();
//Only numeric characters
matcher = pattern.matcher(value.toString());
if(!matcher.matches())
{
FacesMessage msg = new FacesMessage("Only numeric characters");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
//Minimum length 2 numbers
else if((number.length() < 2))
{
FacesMessage msg = new FacesMessage("Minimum length 2 numbers");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
当我插入一位数字时,验证器正常工作并显示消息“最小长度 2 个数字”。但是当我插入一些字母而不是像“eee3”这样的数字时,验证器会显示以下消息:“num1: 'eee3' must be a number between -2147483648 and 2147483647. Example: 9346”, 当它应该显示“只有数字字符”。
我做错了什么?
【问题讨论】:
-
为什么不直接将输入转换为数字并验证其是否 >99 和
标签: regex validation jsf