验证数据库的电子邮件格式和唯一性

时间:2012-06-19 04:31:56

标签: jquery ajax validation jsf-2

我正在创建一个JSF表单,我有一个电子邮件字段。我需要验证电子邮件格式并检查数据库的唯一性。

我需要在最终用户输入电子邮件字段时进行检查。如果它存在于DB中,那么我们需要将字段颜色更改为红色,否则更改为绿色。我想通过ajax执行此操作。

我在PHP中看到了一些示例,但我不清楚如何在JSF中执行此操作。

1 个答案:

答案 0 :(得分:9)

对于常规电子邮件格式验证,您可以使用<f:validateRegex>

<h:inputText id="email" value="#{bean.email}">
    <f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
</h:inputText>
<h:message for="email" />

要对模糊执行验证,请添加<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" />

对于唯一的电子邮件验证,请根据合同实施JSF Validator接口。

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

}

并按<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" />

要更改组件的样式,您可以在stylestyleClass属性中使用EL。

<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" />

你不一定需要jQuery。当jQuery在客户端而不是服务器端运行时,它也会不那么健壮(你知道,最终用户可以100%控制在客户端运行的东西)。