托管Bean中的用户输入验证问题(JSF 2.0)

6
我在尝试从我的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输入组件的方式:
<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 吗?我需要实现任何接口吗?重写任何方法吗?如果有人能帮忙看看并给予帮助,我会非常感激。提前感谢您花费时间阅读。

1个回答

5
<h:message> 不应嵌套在 <h:inputText> 内。请将它们放在一起,而不是嵌套使用。

BalusC,非常感谢你。我终于解决了这个问题 :) 这就是for属性将组件链接到消息的方法。所以在我的情况下,消息不需要嵌套。我还注意到,Eclipse现在在该字段旁边显示一个小信封,以提示它有一个验证消息。终于解决了 :) 再次感谢。 - javing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接