rich:DataTable + h:selectBooleanCheckbox. How to select a concrete row of the table?
adriju Feb 22, 2008 12:27 PMHi 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.