我有一个用于创建用户的表单,它工作正常,所有验证都在服务器端。 问题是,当我为nickName和电子邮件实时添加客户端的valdiation时,验证工作正常,但表单没有发送。
在添加"实时"之前的代码(工作)验证:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Crear Cliente</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</h:head>
<h:body>
<h2>Crear Cliente</h2>
<h:form>
<p> NickName </p>
<h:inputText id ="nickNameid" value="#{datosCliente.nickName}"></h:inputText><br/> <br/>
<p> Correo </p>
<h:inputText id="correoid" value="#{datosCliente.correo}"></h:inputText><br/> <br/>
<p> Nombre </p>
<h:inputText value="#{datosCliente.nombre}"></h:inputText> <br/> <br/>
<p> Apellido </p>
<h:inputText value="#{datosCliente.apellido}"></h:inputText> <br/> <br/>
<p> Contraseña </p>
<h:inputText value="#{datosCliente.passWord}"></h:inputText> <br/> <br/>
<p> Dia </p>
<h:inputText value="#{datosCliente.dia}"></h:inputText> <br/> <br/>
<p> Mes </p>
<h:inputText value="#{datosCliente.mes}"></h:inputText> <br/> <br/>
<p> Año </p>
<h:inputText value="#{datosCliente.anio}"></h:inputText> <br/> <br/>
<h:outputText value="#{datosCliente.mensaje}"
rendered="#{datosCliente.mostrarMensaje == true}"></h:outputText> <br/> <br/>
<h:commandButton value="Crear" action="#{datosCliente.action}"></h:commandButton>
</h:form>
</h:body>
</html>
&#13;
使用实时验证但不发送表单的代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Crear Cliente</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</h:head>
<h:body>
<h2>Crear Cliente</h2>
<h:form>
<p> NickName </p>
<h:inputText id ="nickNameid" value="doctor" >
<f:validator validatorId="nickNameidValidator" />
<f:ajax event = "keyup" render = "nickNameidMessage"/>
</h:inputText> <br/> <br/>
<h:message id="nickNameidMessage" for="nickNameid"/>
<p> Correo </p>
<h:inputText id="correoid" value="correo@correo" >
<f:validator validatorId="correoidValidator" />
<f:ajax event = "keyup" render = "correoidMessage"/>
</h:inputText> <br/> <br/>
<h:message id="correoidMessage" for="correoid"/>
<p> Nombre </p>
<h:inputText value="#{datosCliente.nombre}"></h:inputText> <br/> <br/>
<p> Apellido </p>
<h:inputText value="#{datosCliente.apellido}"></h:inputText> <br/> <br/>
<p> Contraseña </p>
<h:inputText value="#{datosCliente.passWord}"></h:inputText> <br/> <br/>
<p> Dia </p>
<h:inputText value="#{datosCliente.dia}"></h:inputText> <br/> <br/>
<p> Mes </p>
<h:inputText value="#{datosCliente.mes}"></h:inputText> <br/> <br/>
<p> Año </p>
<h:inputText value="#{datosCliente.anio}"></h:inputText> <br/> <br/>
<h:outputText value="#{datosCliente.mensaje}"
rendered="#{datosCliente.mostrarMensaje == true}"></h:outputText> <br/> <br/>
<h:commandButton value="Crear" action="#{datosCliente.action}"></h:commandButton>
</h:form>
</h:body>
</html>
&#13;
Validator类(对于电子邮件,还有另一个类似于此):
package uy.edu.cure.servidor.web;
import java.lang.reflect.InvocationTargetException;
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;
import uy.edu.cure.servidor.central.lib.UsuarioControllerImpl;
import uy.edu.cure.servidor.central.lib.jeringa.Jeringa;
import uy.edu.cure.servidor.central.lib.jeringa.JeringaInjector;
/**
*
* @author SCN
*/
@FacesValidator("nickNameidValidator")
public class NickNameidValidator implements Validator {
@Jeringa(value="usuariocontroller")
private UsuarioControllerImpl usuariocontroller;
public NickNameidValidator(){
try {
JeringaInjector.getInstance().inyectar(this);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
@Override
public void validate(FacesContext fc, UIComponent uic, Object t) throws ValidatorException {
String nick = t.toString();
if(usuariocontroller.existeCliente(nick) || usuariocontroller.existeProveedor(nick)){
throw new ValidatorException(new FacesMessage (FacesMessage.SEVERITY_ERROR,
"Nick no disponible",null));
}
else{
throw new ValidatorException(new FacesMessage (FacesMessage.SEVERITY_INFO,
"Nick disponible",null));
}
}
&#13;
知道为什么在添加验证后表单没有发送?
抱歉我的英文不好:/。