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;
}
}