Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Pasar un Map de países ordenados a un dropdown de la vista

Estas en el tema de Pasar un Map de países ordenados a un dropdown de la vista en el foro de Java en Foros del Web. Hola a todos, básicamente tengo dos dudas que no he sido capaz de solucionar: La primera es tan sencilla como pasarle un Map de países ...
  #1 (permalink)  
Antiguo 07/11/2013, 13:04
 
Fecha de Ingreso: febrero-2006
Mensajes: 43
Antigüedad: 18 años, 10 meses
Puntos: 1
Pasar un Map de países ordenados a un dropdown de la vista

Hola a todos, básicamente tengo dos dudas que no he sido capaz de solucionar:

La primera es tan sencilla como pasarle un Map de países y claves ordenados a una vista para un dropdown, pongo mis códigos:

El list de CountryDao:
Código PHP:
@SuppressWarnings("unchecked")
 @
Transactional
 
public List<CountrylistOrderByName() {
     
Session s HibernateUtil.getSession();
     
s.beginTransaction();
     List<
Countrynull;
     try {
         
//c = (List<Country>)s.createQuery("SELECT c FROM countries c").list();
         
= (List<Country>)s.createQuery("SELECT c FROM com.omb.bets.model.country.Country c ORDER BY c.name ASC").list();
         
//c = (List<Country>)s.createSQLQuery("SELECT id, name FROM countries").addEntity(Country.class).list();

     
} catch (HibernateException e) {
         
e.printStackTrace();
     }  
     
s.close();       
     
     return 
c;
 } 
El controller donde obtengo los datos:
Código PHP:
  //Obtenemos la lista de paises
  
List<Countrycountry cDao.listOrderByName();  
  
  final 
Map<StringStringcountryMap = new HashMap<StringString>();
  
  
Iterator<Countryiterador country.listIterator(); 
  while( 
iterador.hasNext() ) {
   
Country c = (Countryiterador.next();
   
countryMap.put(Long.toString(c.getId()), c.getName());
  }
  
  
model.addAttribute("country"countryMap); 
Y la vista:
Código PHP:
<form:select  path="country">
   <
form:options items="${country}"></form:options>
</
form:select
He tenido que pasar la List a un map porque el list es de objetos de tipo country y me los imprimía como objeto y no id - nombre. En la consulta están ordenados por nombre pero donde creo que se desordenan es al añadirlos al map. ¿Como puedo solucionar esto?

El otro error es algo que me pica, si os fijais en la consulta he estado haciendo pruebas y tengo que poner el paquete entero de la clase de la siguiente forma:
"SELECT c FROM com.omb.bets.model.country.Country c ORDER BY c.name ASC"

Si uso el nombre de la tabla me da el siguiente error:
org.hibernate.hql.ast.QuerySyntaxException: countries is not mapped [SELECT c FROM countries c]

Un saludo y gracias.
  #2 (permalink)  
Antiguo 07/11/2013, 14:06
 
Fecha de Ingreso: febrero-2006
Mensajes: 43
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Pasar un Map de países ordenados a un dropdown de la vista

Vale, he conseguido solucionar el problema de la ordenación:
Simplemente paso a la vista la List y borro todo lo del map y lo imprimo en la vista de la siguiente forma:
<form:select path="country">
<form:options items="${country}" itemValue="id" itemLabel="name"></form:options>
</form:select>

Derivado de esto tengo otro problema:
El formulario es para registrar un usuario y en la clase usuario ten una Propiedad country de la siguente forma:
Código PHP:
 @ManyToOne
 
@JoinColumn(name="country_id")
 private 
Country country
Al insertar el usuario me da el siguiente error en el país:
Failed to convert property value of type 'java.lang.String' to required type 'com.omb.bets.model.country.Country' for property 'country'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.omb.bets.model.country.Country] for property 'country': no matching editors or conversion strategy found

¿Como hago para convertir el id que se envía a un objeto de tipo país?
  #3 (permalink)  
Antiguo 07/11/2013, 20:15
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Pasar un Map de países ordenados a un dropdown de la vista

Hola,

Posiblemente,

http://docs.oracle.com/javaee/6/api/...Converter.html
http://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/

Tienes que convertir de String a Object y vicerversa.

Saludos,
  #4 (permalink)  
Antiguo 09/11/2013, 11:30
 
Fecha de Ingreso: febrero-2006
Mensajes: 43
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Pasar un Map de países ordenados a un dropdown de la vista

He conseguido solucionar mi problema siguiendo el contenido de este enlace: http://empire5.com/development/binding-a-custom-object-in-spring-3/

Ahora inserto países y provincias sin problema.

No he conseguido solucionar el problema del createQuery y sigo teniendo que poner el nombre del paquete y la clase completa.

Otra duda que me surge ahora es cómo hago un formulario que envíe un número dinámico de clases, por ejemplo: El usuario crea un pedido y agrega productos con sus correspondientes parámetros, talla, cantidad, etc...

En el modelo la clase pedido tendrá un array productos y tendré el mismo problema que antes pero esta vez tendré un array de ids, ¿Cómo soluciono esto?

Un saludo y gracias.
  #5 (permalink)  
Antiguo 09/11/2013, 18:00
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Pasar un Map de países ordenados a un dropdown de la vista

Hola,

Cita:
Iniciado por oskrok Ver Mensaje
Ahora inserto países y provincias sin problema.
En ese caso que estas usando Spring y delegando la resolución de variables con FacesELResolver ese método es más simple, aunque funciona solamente de una vía. La forma de solucionarlo usando solamente JSF es con Converter y funciona directamente con cualquier Managed Bean en dos vías, 'bindeando' la propiedad a las etiquetas JSF.

Cita:
Iniciado por oskrok Ver Mensaje
No he conseguido solucionar el problema del createQuery y sigo teniendo que poner el nombre del paquete y la clase completa.
Posiblemente no esta configurada esa Entity. En JPA se puede utilizar la palabra NEW para identificar un objeto que no está mapeado pero existente; pero en ese caso se necesita el nombre canónico de la clase. Si estas usando Annotations tendrías que revisar que estén bien, sino tendrías que revisar los maps de JPA en persistence.xml o posiblemente en los archivos de configuración específicos de Hibernate (los hbm).

Cita:
Iniciado por oskrok Ver Mensaje
Otra duda que me surge ahora es cómo hago un formulario que envíe un número dinámico de clases, por ejemplo: El usuario crea un pedido y agrega productos con sus correspondientes parámetros, talla, cantidad, etc...

En el modelo la clase pedido tendrá un array productos y tendré el mismo problema que antes pero esta vez tendré un array de ids, ¿Cómo soluciono esto?
Eso dependerá completamente del diseño de la página, normalmente capturas los datos con un Managed Bean y muestras los datos con un JSF datatable (posiblemente usando AJAX). Y dependiendo del caso necesitas un Converter.

Saludos,
  #6 (permalink)  
Antiguo 14/11/2013, 14:50
 
Fecha de Ingreso: febrero-2006
Mensajes: 43
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Pasar un Map de países ordenados a un dropdown de la vista

He conseguido solucionar lo del nombre en el CreateQuery, bastaba con darle un nombre a la clase con la anotación @Entity(name = "provinces");

Solucionado.

Etiquetas: clase, dropdown, map, países, string, vista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:40.