我在尝试从我的JSF中的托管bean验证用户输入时遇到了一些问题。我在控制台中接收到验证消息,但是在页面上看不到它。我不明白问题出在哪里。
这是控制台输出:
INFO: Inside validation method!! INFO: NO MATCH!!! INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=bRegForm:name[severity=(INFO 0), summary=(Your name cannot contain special characters), detail=(Your name cannot contain special characters)]
这是我如何创建JSF输入组件的方式:
这是控制台输出:
INFO: Inside validation method!! INFO: NO MATCH!!! INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=bRegForm:name[severity=(INFO 0), summary=(Your name cannot contain special characters), detail=(Your name cannot contain special characters)]
这是我如何创建JSF输入组件的方式:
<h:inputText id="name" value="#{registrationController.name}" validator="#{registrationController.validateName}" required="true">
<h:message for="name"/>
</h:inputText>
这是我创建验证方法的步骤:
@ManagedBean
@RequestScoped
public class RegistrationController {
...
public void validateName(FacesContext context, UIComponent validate,
Object value) {
String inputFromField = (String) value;
String simpleTextPatternText = "^[a-zA-Z0-9]+$";
Pattern textPattern = null;
Matcher nameMatcher = null;
textPattern = Pattern.compile(simpleTextPatternText);
nameMatcher = textPattern.matcher(inputFromField);
System.out.println("Inside validation method!!");
if (!nameMatcher.matches()) {
System.out.println("NO MATCH!!!");
FacesMessage msg = new FacesMessage(
Your name cannot contain special characters);
throw new ValidatorException(msg);
}
}
你看到我成功进入了验证方法,当我尝试包含特殊字符的输入时,例如:G#^r$>',... 并且在控制台中看到了相关的建议信息,但是我没有在输入字段旁边的页面上看到任何消息。
顺便说一下:当我提供空输入时,我没有看到任何验证消息,而我已经将其设置为 required="true"。
我检查了错误日志和控制台,但我没有找到任何异常可以给我线索(只有上面复制粘贴的警告消息)。
我是一个 JSF 2.0 的初学者,我被这个问题困扰了三天,我不知道该怎么解决它。我需要配置任何 XML 吗?我需要实现任何接口吗?重写任何方法吗?如果有人能帮忙看看并给予帮助,我会非常感激。提前感谢您花费时间阅读。