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

Posted

技术标签:

【中文标题】托管 bean 问题中的用户输入验证(JSF 2.0)【英文标题】:User input validation in managed bean problem(JSF 2.0 ) 【发布时间】:2011-07-09 09:11:52 【问题描述】:

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

这是控制台输出:

INFO:内部验证方法!! 信息:不匹配!!! 信息:实例化 org.hibernate.validator.engine.resolver.JPATraversableResolver 的实例。 信息:警告:FacesMessage(s) 已入队,但可能尚未显示。 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$>',...在输入字段旁边的页面上看不到消息。 顺便说一句:我还注意到,当我提供空输入时,我没有看到任何验证消息,并且我确实将其设为 required="true"。 我检查了错误日志和控制台,但我没有找到任何可以给我线索的异常(只是我在上面复制粘贴的警告消息)。 我是 JSF 2.0 的初学者 这是我被这个问题困扰的第三天,我不知道如何解决它。我需要配置任何 XML 吗?我需要实现任何接口吗?覆盖任何方法?...如果有人可以看看它并帮助我,我会很高兴。非常感谢您抽出宝贵的时间阅读。

【问题讨论】:

【参考方案1】:

&lt;h:message&gt; 不应嵌套在 &lt;h:inputText&gt; 中。把它们放在一起。

【讨论】:

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

以上是关于托管 bean 问题中的用户输入验证(JSF 2.0)的主要内容,如果未能解决你的问题,请参考以下文章

基于 JSF 表单的身份验证 + 托管 Bean 登录不起作用

JSF 获取托管 bean 中的当前操作

从 JSF 中的托管 bean 获取资源文件的路径

使用 URL 参数的 JSF 托管 Bean 方法调用

JSF 2 应用程序中的默认托管 Bean 范围是啥?

如何从jsf / primefaces中的托管bean向页面添加组件[重复]