JSF ajax验证不验证具有必需true的项目

时间:2013-07-24 04:11:26

标签: ajax validation jsf

我有一个数据表,一个用h:commandlink进行编辑的列(ajax请求),详细显示在jquery对话框中,一切正常,在编辑表单中我有h:commandlink(ajax request)用于保存,如果我做的话更改,例如,删除所需输入的值,并按下提交,jsf不验证此输入,并且不显示消息“此输入是必需的”

          

    <div id="container">
        <button id="create-user" >Create new user</button>

    <h:dataTable value="#{gasweb.lsProveedor}" var="tabpro" id="example" class="display dataTable" >
        <h:column>
            <f:facet name="id">
                <h:outputLabel value="Id"/>
            </f:facet>
            <h:outputText value="#{tabpro.proveedor_id}"/>
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputLabel value="Cedula"/>
            </f:facet>
            <h:outputText value="#{tabpro.cedula_ruc}"/>
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputLabel value="NombreComercial"/>
            </f:facet>
            <h:commandLink value="#{tabpro.nombre_comercial}" actionListener="#{gasweb.doEditProveedor2}" class="labrir"    >
                <f:param name="pproveedor_id" value="#{tabpro.proveedor_id}" />
                <f:ajax execute="@this"   render=":forma:editgrid"  >
                </f:ajax>
            </h:commandLink>

        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputLabel value="Razon Social"/>
            </f:facet>
            <h:outputText value="#{tabpro.razon_social}"/>
        </h:column>

    </h:dataTable>

    </div> 

    <div id="divformap" title="Proveedor">

            <h:inputHidden value="#{gasweb.newRecord}" id="txtnewrecord"  />
            <h:inputHidden value="#{gasweb.ruc_proveedor_ori}" id="txtcedulaori"  />
            <h:panelGrid  columns="2" id="editgrid" >
                <h:outputLabel value="Id             :" />
                <h:outputText id="txtid" value="#{gasweb.proveedor.proveedor_id}"  />
                <h:outputLabel value="Ruc             :" />
                <h:inputText id="txtcedula" value="#{gasweb.proveedor.cedula_ruc}" size="20" class="text ui-widget-content ui-corner-all" />
                <h:outputLabel value="Nombr Comercial :" />
                <h:inputText id="txtnombre" value="#{gasweb.proveedor.nombre_comercial}" required="true" size="80"  class="text ui-widget-content ui-corner-all"/>
                <h:outputLabel value="Razón Social    :" />
                <h:inputText id="txtrazon" value="#{gasweb.proveedor.razon_social}" size="80" class="text ui-widget-content ui-corner-all"/>
                <h:outputLabel value="Dirección       :" />
                <h:inputText id="txtdireccion" value="#{gasweb.proveedor.direccion}" size="80" class="text ui-widget-content ui-corner-all"/>
                <h:outputLabel value="Telefono        :" />
                <h:inputText id="txttelefono" value="#{gasweb.proveedor.telefono}" size="20" class="text ui-widget-content ui-corner-all"/>
                <h:outputLabel value="Estado          :" />
                <h:outputText id="txtestado" value="#{gasweb.proveedor.estado}"  />
                <h:commandButton id="aceptar"   value="Aceptar" actionListener="#{gasweb.doGrabaProveedor}"  >
                    <f:param name="pproveedor_id2" value="#{gasweb.proveedor.proveedor_id}" />
                    <f:ajax render="bProveedor" execute="@form" onevent="resetFocus"  />
                  </h:commandButton>
                <h:outputText id="bProveedor" value="#{gasweb.bProveedorExiste}" />
            </h:panelGrid>

    </div>


    

我的托管bean

公共类GasperWebMB实现了Serializable {

private List<Contribuyente> lsContribuyente;
private List<Proveedor> lsProveedor;
private Contribuyente contribuyente;
private Proveedor proveedor;
private Declara serdec;
private FacesContext fc = FacesContext.getCurrentInstance();
private Boolean newRecord;
private String ruc_proveedor_ori;
private String bProveedorExiste;
//@ManagedProperty("#param.pproveedor_id")
//private Integer pproveedor_id;
//private HttpServletRequest request;

public GasperWebMB(){
    serdec = new Declara();
    contribuyente = new Contribuyente();
    proveedor = new Proveedor();
    lsContribuyente = serdec.getAllContribuyente();
    lsProveedor = serdec.getAllProveedor();
    newRecord = true;
    log("creado");
    //request.getHeader(ruc_proveedor_ori);
}

public String getbProveedorExiste() {
    return bProveedorExiste;
}

public void setbProveedorExiste(String bProveedorExiste) {
    this.bProveedorExiste = bProveedorExiste;
}

public String getRuc_proveedor_ori() {
    log(ruc_proveedor_ori);
    return ruc_proveedor_ori;
}

public void setRuc_proveedor_ori(String ruc_proveedor_ori) {
    log(ruc_proveedor_ori);
    this.ruc_proveedor_ori = ruc_proveedor_ori;
}

public Boolean getNewRecord() {
    log(newRecord);
    return newRecord;
}

public void setNewRecord(Boolean newRecord) {
    log(newRecord);
    this.newRecord = newRecord;
}

public List<Proveedor> getLsProveedor() {
    log(lsProveedor);
    return lsProveedor;
}

public void setLsProveedor(List<Proveedor> lsProveedor) {
    log(lsProveedor);
    this.lsProveedor = lsProveedor;
}

public Proveedor getProveedor() {
    log(proveedor);
    return proveedor;
}

public void setProveedor(Proveedor proveedor) {
    log(proveedor);
    this.proveedor = proveedor;
}

public List<Contribuyente> getLsContribuyente() {
    return lsContribuyente;
}

public void setLsContribuyente(List<Contribuyente> lsContribuyente) {
    this.lsContribuyente = lsContribuyente;
}

public Contribuyente getContribuyente() {
    return contribuyente;
}

public void setContribuyente(Contribuyente contribuyente) {
    this.contribuyente = contribuyente;
}

public String doEditContribuyente(){

    Map<String, String> params = fc.getExternalContext().getRequestParameterMap();

    contribuyente = serdec.getContribuyenteById(Integer.parseInt(par));
    newRecord = false;
    ruc_proveedor_ori = proveedor.getCedula_ruc();
    return "FContribuyente";

}

public String doGrabaContribuyente(){
    System.out.println("grabar " + contribuyente.getCedula_ruc()+ " id " + contribuyente.getContribuyente_id());
    serdec.updContribuyente(contribuyente);
    return "lisContribuyente";
}

public String doEditProveedor(){
    System.out.println("Entra");
    Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
    String par = params.get("pproveedor_id");
    System.out.println("pro" + par);
    proveedor = serdec.getProveedorById(Integer.parseInt(par));

    newRecord = false;
    System.out.println("va a salir");
    return "editprov";

}

public void doGrabaProveedor(ActionEvent event){
    System.out.println("gra"+proveedor.getNombre_comercial()+" new "+ newRecord);
    Proveedor xpro = serdec.getProveedorByRuc(proveedor.getCedula_ruc());
    if (xpro != null && !proveedor.getCedula_ruc().equals(ruc_proveedor_ori)){
        System.out.println("Ya existe");
        bProveedorExiste = xpro.getNombre_comercial();
        //FacesContext.getCurrentInstance().validationFailed();
        FacesMessage fmes = new FacesMessage("El Ruc "+proveedor.getCedula_ruc()+" ya se encuentra registrado para otro proveedor");
        fc.addMessage(null, fmes);
        //fc.addMessage("Proveedor ya existe", fmes);
        //return "sucess";
        return;
    }
    if (newRecord){
        proveedor.setEstado("A");
        //serdec.insProveedor(proveedor);
    }
    else {
        //serdec.updProveedor(proveedor);
    }
    System.out.println("Si graba");
    //return "sucess";
}

public void doEditProveedor2(ActionEvent event){
    /*Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
    String par = params.get("pproveedor_id");
    proveedor = serdec.getProveedorById(Integer.parseInt(par));
    newRecord = false;
    return "FProveedor";*/
    String pproveedor_id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pproveedor_id");
    proveedor = serdec.getProveedorById(Integer.parseInt(pproveedor_id));
    newRecord = false;
    System.out.println("si edit2  param "+ pproveedor_id + " new "+ newRecord);
    System.out.println("si edit2  proveedor "+ proveedor.getNombre_comercial() + " new "+ newRecord);
}

private void log(Object object) {
    String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
    System.out.println("Bean " + methodName + ": " + object);
}

}

在此代码中,删除了jquery对话框并在div中显示详细信息

1 个答案:

答案 0 :(得分:0)

您必须将<h:messages /><h:message />放在html页面上。

h:messages - 输出当前页面中的所有消息 h:message - 为特定组件输出单个消息。

1-在您的情况下,请尝试将<h:messages />放在首页或编辑表单内。
2-或者你可以为每个必需的输入添加<h:message />,例如
输入之后/之前<h:message for="txtnombre" style="color:red" />