提问人:Moglash 提问时间:7/15/2019 最后编辑:KukeltjeMoglash 更新时间:7/15/2019 访问量:717
使用 AJAX 和验证器类进行 JSF 表单验证 [duplicate]
JSF form validation with AJAX and validator class [duplicate]
问:
我有一个大学任务,我们将使用 AJAX 和 Validator 类验证表单输入。现在,我已经在 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函数可能是有意义的。但我真的不确定这一点。如何传递参数 context、component 和 value?
public void validateEmail(AjaxBehaviorEvent e) {
// Email emailValidator = new Email();
// emailValidator.validate(context, component, value);
}
答:
0赞
Jeremy Benjamin
7/15/2019
#1
您可以在 XHTML 文件中验证您的电子邮件。
为此,请看一下:在 JSF 2 / PrimeFaces 中使用正则表达式进行电子邮件验证
因此,您实际上只需要验证用户名或电子邮件是否已存在。您可以在大学的验证课程中做到这一点。
如果 UserManager 中已经有验证,则可以在验证类中使用该验证。
问候
评论