【问题标题】:JSF form validation with AJAX and validator class [duplicate]使用 AJAX 和验证器类进行 JSF 表单验证 [重复]
【发布时间】:2019-11-23 13:19:54
【问题描述】:

我有一个大学任务,我们将使用 AJAX 和验证器类验证表单输入。现在,我在 JSF 中使用 AJAX 来过滤列表。但我不知道如何将它与验证器结合使用。当用户离开输入字段时,应该进行验证。验证器应检查电子邮件输入是否与正则表达式模式匹配,以及是否存在使用相同电子邮件的现有用户。如果验证失败,应该显示 FacesMessage。如何连接这些点?

这是一个更大项目的一部分,我已尝试仅包含相关代码。

文件结构(仅相关部分)

.
├── java
│   ├── dao
│   ├── logic
│   ├── presentation
│   │   ├── managedbeans
│   │   │   └── UserBean.java
│   │   └── validator
│   │       └── Email.java
│   │
│   └── transfer
└── webapp
    └── signup.xhtml

代码

signup.xhtml 仅表单的相关部分

<h:form id="registerForm" class="col l6 s12 center">

<h:outputLabel for="eMail" value="Email" class="active" />
  <h:inputText 
    id="eMail" 
    value="#{user.email}" 
    class="validate"
    requiredMessage="Email is required" 
    label="eMail" 
    maxlength="25"
    alt="email" 
    autocomplete="on" 
    required="true">  

    <f:validator validatorId="emailValidator"/> 
    <f:ajax event="change" listener="#{user.validateEmail}" execute="eMail" render="emailError"></f:ajax>

  </h:inputText>
  <h:message for="eMail" id="emailError" />

  <h:commandButton value="Sign up" action="#{user.addUser}" class="waves-effect waves-light btn" type="submit" />

</h:form>

电子邮件.java

import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("emailValidator")
public class Email implements Validator { 

  private static final Pattern EMAIL_PATTERN = Pattern.compile("[\\w\\.-]*[a-zA-Z0-9_]@[\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]");

  @Override
  public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

    if( value == null) {
      return;
    }

    String email = (String) value;
    boolean matches = EMAIL_PATTERN.matcher(email).matches();

    if(!matches) {
      FacesMessage msg = new FacesMessage(
          FacesMessage.SEVERITY_FATAL,
          "Email is invalid",
          null);
      throw new ValidatorException(msg);
    } 
  }
}

UserBean.java 因此,我认为在 UserBean 中调用函数 validateEmail 然后在 Validator 类中调用 validate 函数可能是有意义的。但我真的不确定这一点。如何传递参数上下文、组件和值?

public void validateEmail(AjaxBehaviorEvent e) {
//    Email emailValidator = new Email();
//    emailValidator.validate(context, component, value);
}

【问题讨论】:

  • 和没有ajax的方法一样

标签: ajax validation jsf xhtml


【解决方案1】:

您可以在 XHTML 文件中验证您的电子邮件。

为此,请查看以下内容: Email validation using regular expression in JSF 2 / PrimeFaces

因此,您实际上只需要验证用户名或电子邮件是否已经存在。您可以在大学的验证课程中做到这一点。

如果您已经在 UserManager 中进行了验证,则可以在验证类中使用它。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多