如果他的电子邮件似乎无效,我想警告用户,但如果他愿意,仍然允许他提交电子邮件。正如我所读到的,除了发送确认消息之外,没有简单的方法来验证电子邮件,但我仍然想警告他愚蠢的错误,因为忘记在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);
}
}
实际上,消息丢失,显示为警告日志。显示的id
为j_id_f:email
,但如果我将其硬编码为email
则无效。另外,我尝试使用action
代替listener
,但该方法甚至没有被调用!
我想要一些建议,如果这是要走的路,或者是否有某种方法可以单独在JSF中进行这种“弱”验证。我使用纯JSF,但会考虑使用扩展。
答案 0 :(得分:2)
您忘记在完成ajax请求时更新<h:message>
,因此JSF根本没有机会在UI中显示该消息。
相应修复:
<f:ajax ... render="m_email" />
...
<h:message id="m_email" ... />