SelectOneListBox en jsf

0 votos
preguntado por Cata (160 puntos) Ene 28, 2016 en Java EE

Tengo que traer los datos de una base de datos en mysql a un SelectOneListBox. En consola con un sysout se que la funcion esta trayendo los valores que necesito que es una lista con los nombres de unos clientes,pero tengo el siguiente error:

Exception while calling encodeEnd on component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /presentacion/error.jsp][Class: javax.faces.component.html.HtmlForm,Id: j_id_jsp_45943319_1][Class: javax.faces.component.html.HtmlSelectOneListbox,Id: uno]}

Caused by:

java.lang.IllegalArgumentException - Value is no String (class=java.util.ArrayList, value=[logica.Cliente@c4cee, logica.Cliente@18ec029]) and component j_id_jsp_45943319_1:unowith path: {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /presentacion/error.jsp][Class: javax.faces.component.html.HtmlForm,Id: j_id_jsp_45943319_1][Class: javax.faces.component.html.HtmlSelectOneListbox,Id: uno]} does not have a Converter

Aqui estoy implementando el h:selectOneListbox en el formulario .jsp

<h:selectOneListbox id="uno" value="#{cliente.nombre_cliente}" >

            <f:selectItems id="dos" value="#{cliente.nombre_cliente}"/>

            </h:selectOneListbox>

Y esta es mi clase cliente:

//Código Fuente
public class Cliente {

    private long id;
    private String zona;
    private String nombre;
    private String direccion;
    private String telefono;
    private boolean editar;
    public static final String ACCION_EXITOSA = "success";
    private ArrayList<Cliente> clientes;
    private ArrayList<SelectItem> nombre_cliente;

    public Cliente(long id, String zona, String nombre, String direccion,
            String telefono, boolean editar) {
        super();
        this.id = id;
        this.zona = zona;
        this.nombre = nombre;
        this.direccion = direccion;
        this.telefono = telefono;
        this.editar = editar;
    }

    public Cliente() {
        super();
    }

    public Cliente(String nombre) {
        super();
        this.nombre = nombre;
    }

    public void setClientes(ArrayList<Cliente> clientes) {
        this.clientes = clientes;
    }

    public ArrayList<SelectItem> getNombre_cliente() {
        nombre_cliente = new ArrayList<SelectItem>();

        try {

            Conexion con = new Conexion();
            ClienteDAO clienteDAO = new ClienteDAO(this.nombre);
            ResultSet resultado = con.consultar(clienteDAO.consultarNombres());
            nombre_cliente.clear();
            while (resultado.next()) {

                this.nombre = resultado.getString("nombre");
                Cliente c= new Cliente(this.nombre);

                nombre_cliente.add(new SelectItem(c, c.getNombre()));
                System.out.println("clientes:"+c.getNombre());

            }
            System.out.println("------------");
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return nombre_cliente;
    }

    public void setNombre_cliente(ArrayList<SelectItem> nombre_cliente) {
        this.nombre_cliente = nombre_cliente;
    }
}

1 Respuesta

+1 voto
respondido por Torres (8,580 puntos) Ene 28, 2016
Buenas!

El problema es que al componente le está llegando directamente el objeto cliente. Cuando es un selectItems se usan objetos Java, el uso debería ser algo parecido a:

<h:selectOneListbox size="1" id="escape02" value="#{select05NoSelection.initialCollectionValues}">
      <f:selectItems value="#{select05NoSelection.hobbitList}"
                     var="n"
                     itemValue="#{n}"
                     itemLabel="#{n.bio}"
                     itemDescription="#{n.description}"
                     itemDisabled="#{n.disabled}"
                     itemLabelEscaped="true"
                     noSelectionValue="#{select05NoSelection.hobbitList[0]}"/>
    </h:selectOneListbox>
El "value" debe de apuntar a la lista, y en itemvalue e itemLabel es donde debes de apuntar a las propiedades que quieras, como por ejemplo "nombre_cliente"

http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/f/selectItems.html


Preguntas relacionadas

0 votos
0 respuestas
preguntado por wuisi (120 puntos) Ene 28, 2016 en Java
0 votos
1 respuesta
preguntado por lordjc (120 puntos) Ene 28, 2016 en Java
0 votos
1 respuesta
preguntado por merchues (120 puntos) Ene 28, 2016 en Java
0 votos
4 respuestas
preguntado por vallefab (160 puntos) Ene 28, 2016 en Java
0 votos
0 respuestas
preguntado por gabomda (120 puntos) Ene 28, 2016 en Java EE
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código
...