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.