Disabling context menu items on a DataTable

UI Components for JSF
Post Reply
agustincba
Posts: 36
Joined: 18 Oct 2010, 09:00

15 Aug 2011, 00:23

Hi !. My problem is the following one... I would like to disable some items of a context menu component depending on which row I select and according to it details... But I don't get the menu items update !... Do you know why ?. Thankx !.

Code: Select all

            <p:contextMenu for="tablaContactos">
                <p:menuitem id="first" value="View" disabled="#{manejadorContactos.primero}" onclick="dlgPanel.show();" />
                <p:menuitem id="second" value="Delete" disabled="#{manejadorContactos.segundo}" onclick="dlgPanel.show();"  />
            </p:contextMenu>

            <p:dataTable value="#{manejadorContactos.lista}" id="tablaContactos" var="con" style="width: 200px;" >
                <p:ajax process="tablaContactos" event="rowSelect" listener="#{manejadorContactos.onRowSelect}" update="first,second"/>
                <p:column headerText="Nombre">
                    <h:outputText value="#{con.nombre}"/>
                </p:column>
                <p:column headerText="Apellido">
                    <h:outputText value="#{con.apellido}"/>
                </p:column>
            </p:dataTable>
Java Code

Code: Select all

public class ManejadorContactos {

    private ArrayList<Contacto> lista;
    private Contacto agregarContacto;
    private boolean primero = false;
    private boolean segundo = true;
    public ManejadorContactos() 
    {
        this.lista = new ArrayList<Contacto>();
        this.lista.add(new Contacto("Agustín Ernesto","CArdeilhac Banús"));
        this.lista.add(new Contacto("Vanesa Soledad","Pereyra"));
        agregarContacto = new Contacto();
    }

    public boolean isPrimero() {
        return primero;
    }

    public void setPrimero(boolean primero) {
        this.primero = primero;
    }

    public boolean isSegundo() {
        return segundo;
    }

    public void setSegundo(boolean segundo) {
        this.segundo = segundo;
    }

    public Contacto getAgregarContacto() {
        return agregarContacto;
    }

    public void setAgregarContacto(Contacto agregarContacto) {
        this.agregarContacto = agregarContacto;
    }

    public ArrayList<Contacto> getLista() {
        return lista;
    }

    public void setLista(ArrayList<Contacto> lista) {
        this.lista = lista;
    }

    public void agregarContactoLista(ActionEvent evt)
    {
        this.lista.add(agregarContacto);
    }

    public void limpiarContactoAgregar(ActionEvent evt)
    {
        this.agregarContacto = new Contacto();
    }

    public void onRowSelect(SelectEvent event)
    {
        Contacto conAux = (Contacto) event.getObject();
        
        if(conAux.getApellido().compareToIgnoreCase("Pereyra")==0)
        {
            this.primero = false;
            this.segundo = true;
        }
        else if(conAux.getApellido().compareToIgnoreCase("Ocampo") == 0)
        {
            this.primero = true;
            this.segundo = false;
        }
        else
        {
            this.primero = true;
            this.segundo = true;
        }

    }
}

User avatar
lusaxxx
Posts: 6
Joined: 05 Aug 2011, 20:22
Location: Slovakia

15 Aug 2011, 12:42

Fisrt of all you need selectionMode="single" for dataTable to call listener for rowSelect + update whole contextMenu.

Bean stayed like it was.

Code: Select all

<h:form id="form">
           <p:contextMenu for="tablaContactos" id="contextMenuId">
                <p:menuitem id="first" value="#{manejadorContactos.timestampInfo}" disabled="#{manejadorContactos.primero}" />
                <p:menuitem id="second" value="Delete" disabled="#{manejadorContactos.segundo}"/>
        	</p:contextMenu>

            <p:dataTable value="#{manejadorContactos.lista}" id="tablaContactos" var="con" style="width: 200px;" selectionMode="single">
                <p:ajax process="tablaContactos" event="rowSelect" listener="#{manejadorContactos.onRowSelect}" update="form:contextMenuId"/>
                <p:column headerText="Nombre">
                    <h:outputText value="#{con.nombre}"/>
                </p:column>
                <p:column headerText="Apellido">
                    <h:outputText value="#{con.apellido}"/>
                </p:column>
            </p:dataTable>
</h:form>
PF 3.0.2M , Tomcat 7.0.16, MyFaces 2.1.2

agustincba
Posts: 36
Joined: 18 Oct 2010, 09:00

15 Aug 2011, 18:01

Hi !. Thankx for answering me !. It's didn't work as the menu always visualizes the first button enabled and the second one not... It's weird !... Hope you can get an idea of what's happening !!!...

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 45 guests