【发布时间】:2011-04-28 11:16:22
【问题描述】:
我需要知道如何为多个字段使用 m 多个验证器,例如姓名和电子邮件 ID,以及年龄和电话号码。我有一个线索,在 ajax 中我可以为具有不同字段的一个表单使用多个验证器,但在 jsf 中只有一个字段(如名称验证器或电子邮件验证器)正在工作,如果我对同一个表单使用两个验证器它不起作用,这是我的代码
package com.dnb;
import java.util.Date;
import javax.faces.component.UIComponent;
public class UserBean
{
private String username;
public String getUsername()
{
return username;
}
public void setUserName(String UserName) {
this.username = UserName;
}
private String emailid;
public String getEmailId()
{
return emailid;
}
public void setEmailId(String EmailId) {
this.emailid = EmailId;
}
private int age;
private Object city;
public String getage()
{
return "";
}
public void setAge(int Age) {
this.age = age;
}
public String getcity()
{
return "";
}
public void setcity(int City) {
this.city = city;
}
public void success() {
setProgressString(getProgressString() + "(Strored successfully)");
}
private void setProgressString(String string) {
// TODO Auto-generated method stub
}
public String getProgressString() {
return getProgressString();
}
private boolean buttonRendered = true;
private boolean enabled=false;
private Long startTime;
public String startProcess() {
setEnabled(true);
setButtonRendered(false);
setStartTime(new Date().getTime());
return null;
}
public Long getCurrentValue(){
if (isEnabled()){
Long current = (new Date().getTime() - startTime)/1000;
if (current>100){
setButtonRendered(true);
}else if (current.equals(0)){
return new Long(1);
}
return (new Date().getTime() - startTime)/1000;
} if (startTime == null) {
return Long.valueOf(-1);
}
else
return Long.valueOf(101);
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public Long getStartTime() {
return startTime;
}
public void setStartTime(Long startTime) {
this.startTime = startTime;
}
public boolean isButtonRendered() {
return buttonRendered;
}
public void setButtonRendered(boolean buttonRendered) {
this.buttonRendered = buttonRendered;
}
}
JSF:
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<html>
<body>
<f:view>
<h:form id="ajaxValidatorForm">
<rich:panel>
<f:facet name="header">
<h:outputText value="User Info:" />
</f:facet>
<h:panelGrid columns="4">
<h:outputText value="Name:" />
<h:inputText value="#{userBean.username}" id="username" required="true" >
<f:validator validatorId="nameValidator" />
<h:message for="username"></h:message>
</h:inputText>
<h:outputText value="Email:" />
<h:inputText value="#{userBean.emailId}" id="emailid" required="true" >
<f:validator validatorId="nameValidator" />
<h:message for="emailid"></h:message>
</h:inputText>
</h:panelGrid>
</rich:panel>
</h:form>
</f:view>
</body>
</html>
名称验证器:
package com.dnb;
import javax.faces.application.FacesMessage;
public class NameValidator implements Validator
{
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
String name = (String) value;
if(!name.contains("123"))
{
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Name must be 3 to 8 letters");
message.setDetail("Name must be 3 to 8 letters");
context.addMessage("userForm:Name", message);
throw new ValidatorException(message);
}
}
电子邮件验证器:
package com.dnb;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class EmailValidator implements Validator
{
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
String email = (String) value;
if(!email.contains("@"))
{
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Email is not valid,Example@abc.com");
message.setDetail("Email is not valid,Example@abc.com");
context.addMessage("userForm:Email", message);
throw new ValidatorException(message);
}
}
}
请为我的问题提供一些完美的答案。
如果我使用一个字段作为 E.mail,我会收到验证器消息,如果我使用两个或多个字段,例如姓名、电话号码,我不会收到验证器消息。只有一个字段有效,如何在 jsf 验证器中使用多个字段
【问题讨论】:
-
您的代码似乎正确。 JSF 在不同的字段上接受多个验证器。您能否更准确地了解“不起作用”的事情?你有什么样的行为?
-
Retagged:添加了jsf和validation标签,去掉了“server”标签(因为quiestion与服务器无关)
-
验证器函数没有被调用,我还在faces.config.xml中添加了类文件,但是函数没有被调用,输出中没有进行验证
标签: java validation jsf richfaces