使用JSF警告无效电子邮件的用户

时间:2012-10-10 15:22:44

标签: jsf validation

如果他的电子邮件似乎无效,我想警告用户,但如果他愿意,仍然允许他提交电子邮件。正如我所读到的,除了发送确认消息之外,没有简单的方法来验证电子邮件,但我仍然想警告他愚蠢的错误,因为忘记在gmail之后输入“.com”。

我正在使用JSF,代码如下所示:

XHTML

<h:inputText id="email" 
    required="true" requiredMessage="Required field" 
    value="#{signupBean.email}">
 <f:ajax 
      event="valueChange" 
      listener="#{signupBean.validateEmail}"/>
</h:inputText>
<h:message for="email"/>

SignupBean

public void validateEmail(AjaxBehaviorEvent event){
    if (email != null && !email.matches(emailRegex)){
        String id = event.getComponent().getClientId();
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Your e-mail seems invalid", "Did you miss the '@' or '.com'?");
        FacesContext.getCurrentInstance().addMessage(id, msg);
    }
}

实际上,消息丢失,显示为警告日志。显示的idj_id_f:email,但如果我将其硬编码为email则无效。另外,我尝试使用action代替listener,但该方法甚至没有被调用!

我想要一些建议,如果这是要走的路,或者是否有某种方法可以单独在JSF中进行这种“弱”验证。我使用纯JSF,但会考虑使用扩展。

1 个答案:

答案 0 :(得分:2)

您忘记在完成ajax请求时更新<h:message>,因此JSF根本没有机会在UI中显示该消息。

相应修复:

<f:ajax ... render="m_email" />
...
<h:message id="m_email" ... />