Jav*_*ava 3 validation ajax jquery jsf-2
我正在创建一个JSF表单,我有一个电子邮件字段.我需要验证电子邮件格式并检查数据库的唯一性.
我需要在最终用户输入电子邮件字段时检查此项.如果它存在于DB中,那么我们需要将字段颜色更改为红色,否则更改为绿色.我想通过ajax执行此操作.
我在PHP中看过一些例子,但我不清楚如何在JSF中做到这一点.
对于一般的电子邮件格式验证,您可以使用<f:validateRegex>.
<h:inputText id="email" value="#{bean.email}">
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
</h:inputText>
<h:message for="email" />
Run Code Online (Sandbox Code Playgroud)
要对模糊执行验证,请添加<f:ajax event="blur">.
<h:inputText id="email" value="#{bean.email}">
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
<f:ajax event="blur" render="m_email" />
</h:inputText>
<h:message id="m_email" for="email" />
Run Code Online (Sandbox Code Playgroud)
对于唯一的电子邮件验证,请Validator根据其合同实施JSF 接口.
@FacesValidator("uniqueEmailValidator")
public class UniqueEmailValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null) {
return; // Let required="true" handle, if any.
}
String email = (String) value;
if (yourUserService.existEmail(email)) {
throw new ValidatorException(new FacesMessage(
FacesMessage.SEVERITY_ERROR, "Email is already in use.", null));
}
}
}
Run Code Online (Sandbox Code Playgroud)
并通过注册 <f:validator>
<h:inputText id="email" value="#{bean.email}">
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
<f:validator validatorId="uniqueEmailValidator" />
<f:ajax event="blur" render="m_email" />
</h:inputText>
<h:message id="m_email" for="email" />
Run Code Online (Sandbox Code Playgroud)
要更改组件的样式,可以使用EL in style或styleClassattribute.
<h:inputText id="email" value="#{bean.email}" styleClass="#{component.valid ? (facesContext.postback ? 'ok' : '') : 'error'}">
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
<f:validator validatorId="uniqueEmailValidator" />
<f:ajax event="blur" render="@this m_email" />
</h:inputText>
<h:message id="m_email" for="email" />
Run Code Online (Sandbox Code Playgroud)
你不一定需要jQuery.当jQuery在客户端而不是服务器端运行时,它也会不那么健壮(你知道,最终用户可以100%控制在客户端运行的东西).
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |