xHtml-Java使用ajax验证文件

时间:2016-10-12 20:40:32

标签: javascript ajax forms validation jsf

我有一个用于创建用户的表单,它工作正常,所有验证都在服务器端。 问题是,当我为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;
&#13;
&#13;

使用实时验证但不发送表单的代码:

&#13;
&#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;
&#13;
&#13;

Validator类(对于电子邮件,还有另一个类似于此):

&#13;
&#13;
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;
&#13;
&#13;

知道为什么在添加验证后表单没有发送?

抱歉我的英文不好:/。

0 个答案:

没有答案