Acceder Registrarme

Guardar selectManyCheckBox


Por: Edison Solórzano Publicado el: 2016-09-03 15:37:28 Pregunta abierta

Hola que tal, Saludos, estoy realizando un proyecto con JSF y tengo que almacenar los valores de unos Check y tengo dudas al respecto de como guardarlos, adjunto una imagen de la vista




JSF

Kevin Arnold Arias Figueroa Marcado como mejor respuesta
por el autor de la pregunta
Usuario de (Perú)

Mira que incluso se puede hacer de forma directa con el array que te digo... aquí te dejo un ejemplo con primefaces si usas sólo JSF... su uso será similar.

En la vista sería algo parecido a:

<p:selectManyCheckbox id="basic" value="#{checkboxView.selectedConsoles}">
    <f:selectItem itemLabel="Xbox One" itemValue="Xbox One" />
    <f:selectItem itemLabel="PS4" itemValue="PS4" />
    <f:selectItem itemLabel="Wii U" itemValue="Wii U" />
</p:selectManyCheckbox>

y el ManagedBean iría más o menos lo siguiente.

@ManagedBean
public class CheckboxView
{ 
	private String[] selectedConsoles;

	public String[] getSelectedConsoles() {
        return selectedConsoles;
    }
 
    public void setSelectedConsoles(String[] selectedConsoles) {
        this.selectedConsoles = selectedConsoles;
    }
}

En el código anterior no se encuentra todo el flujo obviamente... pero estoy casi seguro que con eso ya te haces una idea de que necesitas y como necesitas implementarlo.

Saludos.

  • 2016-09-03 15:54:38
  • Me gusta(0)
Usuario de (Perú)

Hola Édison.

Con respecto a tu pregunta. Lo que puedes hacer es enlazar una variable del objeto el cual vendría a ser bien un array o una lista, es decir; tal como enlazas los "value" de los componente de JSF o PrimeFaces con los atributos definidos en tu ManagedBean ya sea un DTO o un simple Bean; así es como debes enlazarlo con los check, pero ten en cuenta que en este caso como son varios valores, deberá ser sobre un array o una lista.

Por ejemplo:

En el value del primer check deberías poner TuManagedBean.tuDTO.miCheck[0]

En el value del segundo check deberías poner TuManagedBean.tuDTO.miCheck[1]

y así sucesivamente con lo que automáticamente estaría cargando la instancia correspondiente en el valor seleccionado.

Espero me deje entender con este breve ejemplo.

Saludos.

  • 2016-09-03 15:44:10
  • Me gusta(0)
Usuario de (Ecuador)

probaré usando un for para recorrer todos esos valores y te cuento si me dá algún otro problema

  • 2016-09-03 15:46:30
  • Me gusta(1)
Usuario de (Ecuador)

hoy volví a retomar este trabajo y te cuento que si logro insertar en la BD los check, lo que sucede es que trato de guardar un valor con S cuando esta chequeado y uno con N cuando no lo está y estoy teniendo inconvenientes para guardar ese valor

  • 2016-10-12 14:28:40
  • Me gusta(0)
Usuario de (Ecuador)

Me devuelve una valor como este --- Ljava.lang.String;@3d7a35bc

  • 2016-10-12 14:29:36
  • Me gusta(0)
Usuario de (Perú)

Hola Edison, sucede que estás leyendo la parte "Objeto" por asi decirlo... y no estás leyendo el valor como tal... tienes que ver como se está almacenando el valor sobre la variable a la que accedes que como te digo en este momento no estás leyendo su valor sólo lees el objeto que me imagino falta que instancias la parte del valor.

Probablemente lo cargas en un array los valores pero al final le mandas la variable sin acceder a los ítem del array. Fíjate cuidadosamente esa parte.

Saludos.

  • 2016-10-12 14:34:03
  • Me gusta(0)
Usuario de (Ecuador)
<p:outputLabel value="CheckList Rápido"/>
   <p:selectManyCheckbox id="basic" value="#{mbROrdenTrabajo.valor}" layout="responsive" columns="1" style="font-size: 11px">
      <f:selectItems value="#{mbROrdenTrabajo.allListaCheck}" var="ch" itemLabel="#{ch.descripcion}" itemValue="#{ch.codigo}"/>
   </p:selectManyCheckbox>
private String[] valor;

public List<TallerLista> listaCheck;

public List<TallerLista> getAllListaCheck(){
        try{                          
            this.listaCheck = tallerOrdenTrabajoDao.getAllListaCheck();
            return this.listaCheck;            
        }catch(Exception ex){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error fatal:", "Por favor contacte con su administrador. "+ex.getMessage()));            
            return null;
        }
    }



public void insertarListaCheck(){
        try{ 
            for(int i = 1; i <= this.listaCheck.size(); i++){
                this.tallerOrdenTrabajoDao.insertarListaCheck("1", String.valueOf(i), String.valueOf(this.aux));
            }            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Correcto:", "El registro fue realizado correctamente!")); 
        }catch(Exception ex){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error fatal", "Por favor contacte con su administrador. "+ex.getMessage()));
            ex.printStackTrace();
        }
    }
  • 2016-10-12 14:46:53
  • Me gusta(0)
Usuario de (Ecuador)

aún no logro comprender que estoy haciendo mal

  • 2016-10-12 14:47:13
  • Me gusta(0)
Usuario de (Ecuador)
public void insertarListaCheck(){
        try{ 
            for(int i = 1; i <= this.listaCheck.size(); i++){
                this.tallerOrdenTrabajoDao.insertarListaCheck("1", String.valueOf(i), String.valueOf(Boolean.parseBoolean(String.valueOf(valor))));
            }            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Correcto:", "El registro fue realizado correctamente!")); 
        }catch(Exception ex){
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error fatal", "Por favor contacte con su administrador. "+ex.getMessage()));
            ex.printStackTrace();
        }
    }
  • 2016-10-12 14:48:25
  • Me gusta(0)

  • Debes estar logueado para realizar comentarios