0

如果他的电子邮件似乎无效,我想警告用户,但如果他愿意,仍然允许他提交电子邮件。正如我所读到的,除了发送确认消息之外,没有简单的方法来验证电子邮件,但我仍然想警告他一些愚蠢的错误,因为忘记在 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"/>

注册豆

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);
    }
}

实际上,消息丢失,显示为警告日志。id出现的是,j_id_f:email但如果我硬编码为email. 另外,我尝试过使用action而不是listener,但甚至没有调用该方法!

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

4

1 回答 1

2

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

相应地修复它:

<f:ajax ... render="m_email" />
...
<h:message id="m_email" ... />
于 2012-10-10T16:12:07.717 回答