Validation 无法验证值为空的组件

Validation 无法验证值为空的组件,validation,jsf,Validation,Jsf,我在注册页面上有一个.xhtml文件: <h:inputSecret id="password" value="#{registraCliente.password}" required="true" binding="#{password}" requiredMessage="Password obbligatoria" validator

我在注册页面上有一个.xhtml文件:

<h:inputSecret id="password"
               value="#{registraCliente.password}"
               required="true"
               binding="#{password}"
               requiredMessage="Password obbligatoria"
               validatorMessage="Password non valida">

    <f:validateRegex pattern="(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/)" />
</h:inputSecret>
<h:message for="password" style="color:red" />

<h:inputSecret id="confermaPassword"
               required="true"
               value="#{registraCliente.confermaPassword}"
               requiredMessage="Devi inserire di nuovo la password">

    <f:validator validatorId="passwordValidator" />
    <f:attribute name="password" value="#{password}" />
</h:inputSecret>

<h:message for="confermaPassword" style="color:red" />

我想要这样:如果两个输入密码不同,它会显示一个错误。但是如果它们是一样的,那么注册是允许的。 我还添加了一个validateRegex标记来检查密码的“强度”,但这正是我遇到一些问题的时候。 当我启动服务器并填写表单(在两个输入文本中写入相同的密码)时,它应该注册,但它没有注册,它保持在相同的xhtml页面上

Eclipse的控制台给了我以下警告:

无法验证值为空的组件:j_id_4:confermaPassword

它是怎么来的


passwordValidator
(下面评论中的链接)是一个实现验证器的bean,我从Balusc的一篇博客文章中复制了它,他是JSF专家,我应该说:D

警告(不是错误!)和失败的提交是无关的。我可以解释这个警告,但根据目前提供的信息,我无法解释提交失败的原因。你不太清楚“它不”的部分。您的意思是说调用应用程序阶段由于验证错误而未执行?如果是,具体是哪一个?你确定你正在显示和更新表单中的所有faces消息吗?嗨@BalusC,我不是很清楚,很抱歉。。。我会再试一次:没有validateRegex标记,页面运行良好,我可以轻松提交注册表单。然后,如果我也使用了validateRegex,在任何情况下,我都会在PasswordValidator的第39行得到一个NullPointerException:正如您所看到的,我还尝试在PasswordValidator中定义一个正则表达式检查(现在已注释),以避免使用validateRegex标记,但这也不起作用。