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

问题描述:

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

这是控制台输出:

INFO:内部验证方法!! 信息:没有匹配! 信息:实例化org.hibernate.validator.engine.resolver.JPATraversableResolver的一个实例。 信息:警告:FacesMessage(s)已被排队,但可能未被显示。 的SourceID = bRegForm:名称[严重性=(INFO 0),摘要=(您的名字不能包含特殊字符),细节=(您的名字不能包含特殊字符)]

这是如何进行的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); 
    } 
} 

正如你看到我设法得到验证方法中,当我尝试确实包含特殊字符输入acters like:G#^ r $>',...并且我在控制台中看到关于它的消息,但是在输入字段旁边的页面上显示的消息没有看到。顺便说一下:我还注意到,当我给空输入我没有看到任何验证消息,我确实要求=“真”。 我检查了错误日志和控制台,但我没有发现任何可以给我提示的异常(只是上面粘贴的警告消息)。 我是一个使用JSF 2.0的begginer这是第三天我陷入这个问题,我不知道解决它。我需要配置任何XML吗?我需要实现任何接口吗?重写任何方法?...如果有人可以看看它并帮我一把,我会很高兴。提前非常感谢您的阅读时间。

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

+0

BalusC的朋友,非常感谢。我终于解决了问题:)这就是它的for属性负责将组件链接到消息。所以在我的情况下,消息不需要嵌套。我还注意到,eclipse现在在该字段旁边显示一个小信封,通知它有一个验证消息。最后:)再次。 – sfrj 2011-03-05 13:59:00

+0

不客气。 – BalusC 2011-03-05 14:46:03