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

时间:2011-03-05 11:43:37

标签: java jsf java-ee jsf-2 java-ee-6

当我尝试在托管bean中验证来自我的JSF的用户输入时,我遇到了一些问题。我在控制台中收到了验证消息,但我没有在页面中看到它。我不明白问题在哪里。

这是控制台输出:

  

信息:内部验证方法!!   信息:没有比赛!   信息:实例化org.hibernate.validator.engine.resolver.JPATraversableResolver的实例。   信息:警告:FacesMessage已入队,但可能尚未显示。   sourceId = bRegForm:name [severity =(INFO 0),summary =(你的名字不能包含特殊字符),detail =(你的名字不能包含特殊字符)]

这就是我制作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 $&gt;',...我在控制台中看到有关它的建议的消息,但是我没有看到页面上显示的消息,在输入字段旁边。 顺便说一句:我也注意到,当我给空输入时,我没有看到任何验证消息,我确实让它成为必需=“真”。 我检查了错误日志和控制台,但我没有找到任何可以给我线索的异常(只是我复制粘贴在上面的警告消息)。 我是JSF 2.0的初学者这是第三天我遇到这个问题,我不知道解决它。我需要配置任何XML吗?我需要实现任何接口吗?覆盖任何方法?...如果有人能看一眼并给我一个帮助,我会感到非常高兴。提前感谢您的阅读时间。

1 个答案:

答案 0 :(得分:5)

<h:message>不应嵌套在<h:inputText>内。把它们放在一起。