2
votes

I have a datatable, a column with h:commandlink for edit (ajax request), the detail show in jquery dialog, everything ok, in the edit form i have h:commandlink (ajax request) for save, if i make changes eg, drop a value in input required, and push submit, jsf don't validate this input, and don't show the message "this input is required"

    <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>


My managed bean

public class GasperWebMB implements 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);
}

}

In this code, dropped the jquery dialog and show detail in div

1
Add h:messages to display faces messages.Karthikeyan Vaithilingam

1 Answers

0
votes

you must either put <h:messages /> or <h:message /> at html page.

h:messages – Output all messages in current page.
h:message – Output a single message for a specific component.

1- in your case, try put <h:messages /> at the top page or inside the edit form.
2- or u can to put <h:message /> for each required input such as
<h:message for="txtnombre" style="color:red" /> after/before the input.