13 Replies Latest reply on May 28, 2009 3:07 AM by Moises Lopez

    Problem with Picklist

    Samuel Rodrigues Newbie

      I'm having problems using RichFaces' picklist component. I get some values from the database and want to initialize the picklist with them. The problem is that I don't know how to initialize the right side of the picklist.

      To be more precise, I have some profiles associated with a user, and wish to show the profiles already owned by the user on the right side of the picklist, with the other available profiles on the left side.

      Is there any way to initialize the right side of a picklist when the component is rendered?

        • 1. Re: Problem with Picklist
          Nick Belaevski Master

          Hello,

          Use value attribute to set items of the right side.

          • 2. Re: Problem with Picklist
            Samuel Rodrigues Newbie

            I tried
            D'ont work


            <rich:pickList value="#{Bean.profilesT}">
            <f:selectItems value="#{Bean.profiles}"/>
            </rich:pickList>

            value selected - Bean.profilesT
            value default - Bean.profiles


            help

            • 4. Re: Problem with Picklist
              Anton Belevich Novice

              Hello,
              Could yout attach your java bean code?

              • 5. Re: Problem with Picklist
                Moises Lopez Newbie


                I have the same problem. I post the list for me but SelectItem with the following error: "Value is not String (class = javax.faces.model.SelectItem)
                Can anyone help me?

                Greetings and thanks

                • 6. Re: Problem with Picklist
                  Ilya Shaikovsky Master

                   

                  "abelevich" wrote:
                  Hello,
                  Could yout attach your java bean code?


                  • 7. Re: Problem with Picklist
                    Moises Lopez Newbie

                    This is the pickList definition:
                    <rich:pickList id="listPer" showButtonsLabel="false" value="#{listaParquesAsignadosBean.parqueSel.listaPersonalAsignados}"> <f:selectItems value="#{listaParquesAsignadosBean.parqueSel.listaPersonalDisponibles}"/>
                    </rich:pickList>

                    And this is my java bean code:
                    public class ListaParquesAsignadosBean {

                    @Resource
                    AdmParqueBomberoService parqueService;
                    @Resource
                    EmerParqueAsignadoService parqueAsigService;

                    EmerParqueBomberoBean parqueSel = new EmerParqueBomberoBean();
                    List listaAsignados = new ArrayList();

                    private Long parqueSid;
                    private Long emergenciaSid;

                    public EmerParqueBomberoBean getParqueSel() {
                    return parqueSel;
                    }

                    public void setParqueSel(EmerParqueBomberoBean parqueSel) {
                    this.parqueSel = parqueSel;
                    }

                    public List getListaAsignados() {
                    return listaAsignados;
                    }

                    public void setListaAsignados(List listaAsignados) {
                    this.listaAsignados = listaAsignados;
                    }

                    public Long getParqueSid() {
                    return parqueSid;
                    }

                    public void setParqueSid(Long parqueSid) {
                    this.parqueSid = parqueSid;
                    }

                    public Long getEmergenciaSid() {
                    return emergenciaSid;
                    }

                    public void setEmergenciaSid(Long emergenciaSid) {
                    this.emergenciaSid = emergenciaSid;
                    }



                    public void calculaParquesAsignados (EmerEmergenciaPropsBean emergencia) throws Exception
                    {
                    setListaAsignados(parqueAsigService.calculaParquesAsignados(emergencia));
                    }

                    public void eliminarParqueAsignado()
                    {
                    List listaTmp = getListaAsignados();
                    EmerParqueBomberoBean parqueBorrar = new EmerParqueBomberoBean();
                    for (EmerParqueBomberoBean parque:listaTmp)
                    {
                    if (parque.getSid().equals(getParqueSid()))
                    parqueBorrar = parque;
                    }
                    listaTmp.remove(parqueBorrar);
                    setListaAsignados(listaTmp);
                    }

                    public void muestraRecursosParque() throws Exception
                    {
                    List listaTmp = getListaAsignados();
                    for (EmerParqueBomberoBean parque:listaTmp)
                    {
                    if (parque.getParqueSid().equals(getParqueSid()))
                    setParqueSel(parque);
                    }
                    setParqueSel(parqueAsigService.cargaDatosParqueSeleccionRecursos(getParqueSel(), getEmergenciaSid()));
                    }


                    public void guardarRecursosParque(ActionEvent event) throws Exception
                    {
                    try
                    {
                    List listaTmp = getListaAsignados();
                    EmerParqueBomberoBean parqueAct = new EmerParqueBomberoBean();
                    for (EmerParqueBomberoBean parque:listaTmp)
                    {
                    if (parque.getParqueSid().equals(parqueSel.getParqueSid()))
                    parqueAct = parque;
                    }
                    int i = listaTmp.indexOf(parqueAct);
                    setParqueSel(parqueAsigService.guardarRecursosParque(parqueSel, emergenciaSid));
                    listaTmp.set(i, parqueSel);
                    setListaAsignados(listaTmp);
                    }catch (Exception e) {
                    String mensaje="Se ha producido un fallo al guardar los recursos: " + e.getMessage();
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,mensaje,mensaje);
                    FacesContext.getCurrentInstance().addMessage("modAsignarRecursos" + ":desc",message);
                    }
                    }


                    public void anadirParque (Long parqueSid)
                    {
                    try {
                    AdmParqueBombero parqueEnt = parqueService.findPropertiesEmerBySid(parqueSid);
                    if (parqueEnt != null)
                    {
                    List lista = getListaAsignados();
                    Boolean bEnc = false;
                    int i = 0;
                    while (!bEnc && i<lista.size())
                    {
                    if (lista.get(i).getSid().equals(parqueEnt.getSid()))
                    bEnc = true;
                    i++;
                    }
                    if (!bEnc)
                    {
                    setParqueSel(parqueAsigService.cargaBeanEmerParqueBombero(parqueEnt, true, getEmergenciaSid()));
                    lista.add(getParqueSel());
                    setListaAsignados(lista);
                    }
                    else
                    {
                    String mensaje="El parque de bomberos seleccionado ya existe en la lista mostrada.";
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,mensaje,mensaje);
                    FacesContext.getCurrentInstance().addMessage("modAsignarRecursos" + ":desc",message);
                    }
                    }
                    else
                    {
                    String mensaje="El parque de bomberos seleccionado no se ha podido añadir.";
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,mensaje,mensaje);
                    FacesContext.getCurrentInstance().addMessage("busquedaUsuario" + ":desc",message);
                    }
                    } catch (Exception e) {
                    e.printStackTrace();
                    }
                    }

                    public String compruebaDisponiblesVSAsignados()
                    {
                    String mensaje = "";
                    int i = 0;
                    while (i<getListaAsignados().size())
                    {
                    EmerParqueBomberoBean parqueBean = getListaAsignados().get(i);
                    parqueBean = parqueAsigService.recalculaRecursosParqueBean(parqueBean);
                    //Comprobamos los nuevos disponibles con los asignados.
                    if (!parqueBean.comparaDisponiblesAsignado())
                    {
                    mensaje = "Alguno de los recursos asignados del parque de bomberos " + parqueBean.getNombre() + " ya no está disponible. Realice de nuevo la assignación de recursos.";
                    i = getListaAsignados().size();
                    }
                    i++;
                    }

                    return mensaje;
                    }

                    }

                    • 8. Re: Problem with Picklist
                      Ilya Shaikovsky Master

                      pickList is uses SelectItem's as standard JSF selectMany components.. so if you using some other objects you should define converter properly.

                      • 9. Re: Problem with Picklist
                        Moises Lopez Newbie

                        But the lists are of type SelectItem...

                        public class EmerParqueBomberoBean implements Comparable{

                        @Resource
                        EmerParqueAsignadoService parqueAsigService;

                        private Long sid;
                        private Long parqueSid;
                        private String nombre;
                        private String telefonoParque;
                        private String telefonoGuardia;
                        private Integer distanciaAlSiniestro;
                        private String estadoAsignacion; //Indica si el parque posee recursos disponibles o no. Falta los no disponibles pero en emergencia de menor grado.

                        private List listaPersonalDisponibles = new ArrayList();
                        private List listaPersonalAsignados= new ArrayList();
                        private List listaVehiculosDiponibles= new ArrayList();
                        private List listaVehiculosAsignados= new ArrayList();

                        • 10. Re: Problem with Picklist
                          Ilya Shaikovsky Master

                          should be

                          ...
                          private List<SelectItem> listaPersonalAsignados= new ArrayList<SelectItem>();
                          ...


                          • 11. Re: Problem with Picklist
                            Moises Lopez Newbie


                            No, this is not the problem. Could have something to do with the return value from the picklist is an array of String, not SelectItems?

                            I'm using version 3.3.0, I will try with 3.3.1

                            Thanks

                            • 12. Re: Problem with Picklist
                              Ilya Shaikovsky Master

                              sorry but yes.. target list a list of strings. check http://livedemo.exadel.com/richfaces-demo/richfaces/pickList.jsf.. second sample seems your one.. page code here and to get a full code - checkout project from svn.

                              • 13. Re: Problem with Picklist
                                Moises Lopez Newbie

                                Thanks, the problem is solved.