2 Replies Latest reply on Feb 22, 2008 1:11 PM by adriju

    rich:DataTable + h:selectBooleanCheckbox. How to select a concrete row of the table?

    adriju

      Hi all people!


      I have a rich:DataTable showing some information. One of the columns of the table is a h:selectBooleanCheckbox which shows a concrete value from my Oracle 9i DB. I have associated this h:selectBooleanCheckbox to a ValueChangedListener that is called whenever this changes its status. The question is: how can I associate the row to the selectBooleanCheckbox? In other words, how does the h:selectBooleanCheckbox know which row of the dataTable have I selected?


      This is the .xhtml page that implements this behaviour:


      <rich:dataTable id="fichasList" var="fichas"
                    value="#{fichasList.resultList}"  
                 rendered="#{not empty fichasList.resultList}"
               styleClass="tabla"
              headerClass="columnHeader">        
              <h:column>
                  <f:facet name="header">
                      <s:link styleClass="columnHeader" value="I"></s:link>
                  </f:facet>
                  <h:selectBooleanCheckbox styleClass="select" value="#{fichasChecksBean.checks.instalar==1}" valueChangeListener="#{fichasHome.actualizarI}"          onclick="this.form.submit()" immediate="true">
           <f:param name="cod" value="#{fichas.codFichas}"/>
                 </h:selectBooleanCheckbox><b/>
              </h:column>
              
              <h:column>
                  <f:facet name="header">
                      <s:link styleClass="columnHeader" value="Mnemonico">
                      </s:link>
                  </f:facet>
                  <h:outputText value="#{fichas.mnemotecnicoFichas}"/>
              </h:column>          
              <h:column> 
                  <f:facet name="header"><br/></f:facet>
                  <s:link view="/#{empty from ? 'Fichas' : from}.xhtml" 
                         value="Ver" 
                            id="fichas">
                      <f:param name="fichasCodFichas" 
                              value="#{fichas.codFichas}"/>
                  </s:link>
              </h:column>
          </rich:dataTable>



      Here is my Fichas entity:


      @Entity
      @Table(name = "FICHAS")
      public class Fichas implements java.io.Serializable {
      
           private long codFichas;
           private DatosEmpresa datosEmpresa;
           private Categorias1 categorias1;
           private Doscategorias doscategorias;
           private Equipos equipos;
           private Ubicaciones ubicaciones;
           private String mnemotecnicoFichas;
           private String comentarioFichas;
           private String usuario1Fichas;
           private String usuario2Fichas;
           private String ficheroFichas;
           private Date fechaUbicacionFichas;
           private String nombreCat1Fichas;
           private String nombreCat2Fichas;
           private Set<Manageddevices> manageddeviceses = new HashSet<Manageddevices>(
                     0);
           private Set<TemispConfiguracion> temispConfiguracions = new HashSet<TemispConfiguracion>(
                     0);
           private Set<Checks> checkses = new HashSet<Checks>(0);
           private Set<NuevaConfiguracion> nuevaConfiguracions = new HashSet<NuevaConfiguracion>(
                     0);
           private Set<Equipos> equiposes = new HashSet<Equipos>(0);
      
           public Fichas() {
           }
      
           public Fichas(long codFichas, Equipos equipos, Ubicaciones ubicaciones) {
                this.codFichas = codFichas;
                this.equipos = equipos;
                this.ubicaciones = ubicaciones;
           }
           public Fichas(long codFichas, DatosEmpresa datosEmpresa,
                     Categorias1 categorias1, Doscategorias doscategorias,
                     Equipos equipos, Ubicaciones ubicaciones,
                     String mnemotecnicoFichas, String comentarioFichas,
                     String usuario1Fichas, String usuario2Fichas, String ficheroFichas,
                     Date fechaUbicacionFichas, String nombreCat1Fichas,
                     String nombreCat2Fichas, Set<Manageddevices> manageddeviceses,
                     Set<TemispConfiguracion> temispConfiguracions,
                     Set<Checks> checkses, Set<NuevaConfiguracion> nuevaConfiguracions,
                     Set<Equipos> equiposes) {
                this.codFichas = codFichas;
                this.datosEmpresa = datosEmpresa;
                this.categorias1 = categorias1;
                this.doscategorias = doscategorias;
                this.equipos = equipos;
                this.ubicaciones = ubicaciones;
                this.mnemotecnicoFichas = mnemotecnicoFichas;
                this.comentarioFichas = comentarioFichas;
                this.usuario1Fichas = usuario1Fichas;
                this.usuario2Fichas = usuario2Fichas;
                this.ficheroFichas = ficheroFichas;
                this.fechaUbicacionFichas = fechaUbicacionFichas;
                this.nombreCat1Fichas = nombreCat1Fichas;
                this.nombreCat2Fichas = nombreCat2Fichas;
                this.manageddeviceses = manageddeviceses;
                this.temispConfiguracions = temispConfiguracions;
                this.checkses = checkses;
                this.nuevaConfiguracions = nuevaConfiguracions;
                this.equiposes = equiposes;
           }
      
           @Id
           @Column(name = "COD_FICHAS", unique = true, nullable = false, precision = 10, scale = 0)
           @NotNull
           public long getCodFichas() {
                return this.codFichas;
           }
      
           public void setCodFichas(long codFichas) {
                this.codFichas = codFichas;
           }
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "COD_EMPRESA")
           public DatosEmpresa getDatosEmpresa() {
                return this.datosEmpresa;
           }
      
           public void setDatosEmpresa(DatosEmpresa datosEmpresa) {
                this.datosEmpresa = datosEmpresa;
           }
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "COD_UNOCATEGORIAS")
           public Categorias1 getCategorias1() {
                return this.categorias1;
           }
      
           public void setCategorias1(Categorias1 categorias1) {
                this.categorias1 = categorias1;
           }
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "COD_DOSCATEGORIAS")
           public Doscategorias getDoscategorias() {
                return this.doscategorias;
           }
      
           public void setDoscategorias(Doscategorias doscategorias) {
                this.doscategorias = doscategorias;
           }
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "COD_EQUIPOS", nullable = false)
           @NotNull
           public Equipos getEquipos() {
                return this.equipos;
           }
      
           public void setEquipos(Equipos equipos) {
                this.equipos = equipos;
           }
           @ManyToOne(fetch = FetchType.LAZY)
           @JoinColumn(name = "COD_UBICACIONES", nullable = false)
           @NotNull
           public Ubicaciones getUbicaciones() {
                return this.ubicaciones;
           }
      
           public void setUbicaciones(Ubicaciones ubicaciones) {
                this.ubicaciones = ubicaciones;
           }
      
           @Column(name = "MNEMOTECNICO_FICHAS", length = 31)
           @Length(max = 31)
           public String getMnemotecnicoFichas() {
                return this.mnemotecnicoFichas;
           }
      
           public void setMnemotecnicoFichas(String mnemotecnicoFichas) {
                this.mnemotecnicoFichas = mnemotecnicoFichas;
           }
      
           @Column(name = "COMENTARIO_FICHAS", length = 1024)
           @Length(max = 1024)
           public String getComentarioFichas() {
                return this.comentarioFichas;
           }
      
           public void setComentarioFichas(String comentarioFichas) {
                this.comentarioFichas = comentarioFichas;
           }
      
           @Column(name = "USUARIO1_FICHAS", length = 100)
           @Length(max = 100)
           public String getUsuario1Fichas() {
                return this.usuario1Fichas;
           }
      
           public void setUsuario1Fichas(String usuario1Fichas) {
                this.usuario1Fichas = usuario1Fichas;
           }
      
           @Column(name = "USUARIO2_FICHAS", length = 100)
           @Length(max = 100)
           public String getUsuario2Fichas() {
                return this.usuario2Fichas;
           }
      
           public void setUsuario2Fichas(String usuario2Fichas) {
                this.usuario2Fichas = usuario2Fichas;
           }
      
           @Column(name = "FICHERO_FICHAS", length = 16)
           @Length(max = 16)
           public String getFicheroFichas() {
                return this.ficheroFichas;
           }
      
           public void setFicheroFichas(String ficheroFichas) {
                this.ficheroFichas = ficheroFichas;
           }
           @Temporal(TemporalType.DATE)
           @Column(name = "FECHA_UBICACION_FICHAS", length = 7)
           public Date getFechaUbicacionFichas() {
                return this.fechaUbicacionFichas;
           }
      
           public void setFechaUbicacionFichas(Date fechaUbicacionFichas) {
                this.fechaUbicacionFichas = fechaUbicacionFichas;
           }
      
           @Column(name = "NOMBRE_CAT1_FICHAS", length = 60)
           @Length(max = 60)
           public String getNombreCat1Fichas() {
                return this.nombreCat1Fichas;
           }
      
           public void setNombreCat1Fichas(String nombreCat1Fichas) {
                this.nombreCat1Fichas = nombreCat1Fichas;
           }
      
           @Column(name = "NOMBRE_CAT2_FICHAS", length = 60)
           @Length(max = 60)
           public String getNombreCat2Fichas() {
                return this.nombreCat2Fichas;
           }
      
           public void setNombreCat2Fichas(String nombreCat2Fichas) {
                this.nombreCat2Fichas = nombreCat2Fichas;
           }
           @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fichas")
           public Set<Manageddevices> getManageddeviceses() {
                return this.manageddeviceses;
           }
      
           public void setManageddeviceses(Set<Manageddevices> manageddeviceses) {
                this.manageddeviceses = manageddeviceses;
           }
           @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fichas")
           public Set<TemispConfiguracion> getTemispConfiguracions() {
                return this.temispConfiguracions;
           }
      
           public void setTemispConfiguracions(
                     Set<TemispConfiguracion> temispConfiguracions) {
                this.temispConfiguracions = temispConfiguracions;
           }
           @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fichas")
           public Set<Checks> getCheckses() {
                return this.checkses;
           }
      
           public void setCheckses(Set<Checks> checkses) {
                this.checkses = checkses;
           }
           @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fichas")
           public Set<NuevaConfiguracion> getNuevaConfiguracions() {
                return this.nuevaConfiguracions;
           }
      
           public void setNuevaConfiguracions(
                     Set<NuevaConfiguracion> nuevaConfiguracions) {
                this.nuevaConfiguracions = nuevaConfiguracions;
           }
           @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "fichas")
           public Set<Equipos> getEquiposes() {
                return this.equiposes;
           }
      
           public void setEquiposes(Set<Equipos> equiposes) {
                this.equiposes = equiposes;
           }
      
      }
      



      ANd here is the listener:


      public void actualizarI(ValueChangeEvent event)
           {
                Fichas f = getInstance();
                
                long cod = f.getCodFichas();
                
                ChecksList cL = new ChecksList();          
                String select = "select c from Checks c where c.codFichas=" + cod;
                cL.setEjbql(select);
                
                List l = cL.getResultList();
                
                if(l.size()>0)
                {
                     Checks c = (Checks) l.get(0);
                     
                     if (c.getInstalar()==0)
                     {
                          c.setInstalar(1);
                          getEntityManager().refresh(c);
                     }
                     else 
                     {
                          c.setInstalar(0);
                          getEntityManager().refresh(c);
                     }
                }
           }
      



      I tried to this using f:param, but I do not know if I don't know how to use it or even it is not well done.


      Any suggestion?


      Thanks in advance.