2010-11-08 12 views
8

Soy nuevo en Java y tengo un problema al mostrar datos de una lista de objetos. Tengo un método simple, que debe recoger datos de varias tablas y devolverlo a mi controlador:¿Cómo obtener datos de la lista <Object> (Java)?

public List<Object> getHouseInfo(){ 
Query q = em.createNativeQuery("SELECT houses.id, addresses.country, addresses.region, house_details.rooms, house_details.square FROM houses, addresses, house_details"); 
List<Object> myList = q.getResultList(); 
return myList;} 

Ahora quiero conseguir estos datos en el controlador, pero don `t saber cómo obtener resultados individuales de la lista. Traté de hacer algo como esto:

List<Object> list = getHouseInfo(); 
for (int i=0; i<list.size; i++){ 
System.out.println("Element "+i+list.get(0));} 

pero yo estoy recibiendo sólo referencias a estos objetos (por ejemplo [Ljava.lang.Object; 167a47b @). También traté de usar Iterator, pero el resultado es el mismo. He intentado utilizar un código como este:

List<Object> list = getHouseInfo(); 
for (int i=0; i<list.size; i++){ 
System.out.println("Element "+i+list.get(0)[0]);} 

pero me doesn`t ayudar también - esto termina con un error de compilación.

¿Puede alguien decirme cómo obtener un 'id' (valor entero) de esta lista? yo estoy usando MyFaces en mi 'Ver' en las que tengo un código como este (houseControll es el nombre de mi JSF Bean administrado - el controlador):

<t:dataList id="myDataList" value="#{houseControll.fullOffer}" var="element" rows="3" > 
... 
<t:outputText id="houseId" value="#{element[0]}"/> 
... 
</t:dataList> 

este código muestra un valor de 'id' correctamente - Tengo 1,2,3, ... valores. ¿Cómo puedo obtener el mismo resultado en mi controlador? Cómo imprimir los datos en el controlador?

Respuesta

0
System.out.println("Element "+i+list.get(0));} 

En caso de ser

System.out.println("Element "+i+list.get(i));} 

Para utilizar las etiquetas JSF, le dará el valor de lista de datos de atributos de una referencia a la lista de elementos, y el atributo var es un nombre local para cada elemento de la lista en turno. Dentro de la lista de datos, utiliza las propiedades de los objetos (captadores) para emitir la información sobre ese objeto individual:

<t:dataList id="myDataList" value="#{houseControlList}" var="element" rows="3" > 
... 
<t:outputText id="houseId" value="#{element.houseId}"/> 
... 
</t:dataList> 
0

usted debe intentar algo como esto

List xx= (List) list.get(0) 
String id = (String) xx.get(0) 

o si tiene un valor de objeto Casa el resultado de la consulta es del mismo tipo, entonces

House myhouse = (House) list.get(0); 
13

Para empezar no está interactuando sobre la lista de resultados correctamente, usted no está utilizando el índice i en absoluto. Intentar algo como esto:

List<Object> list = getHouseInfo(); 
for (int i=0; i<list.size; i++){ 
    System.out.println("Element "+i+list.get(i)); 
} 

Parece que la consulta reutrns una lista de matrices de objetos, porque matrices no son objetos propios que anulan toString que tiene que hacer un molde, luego utilice Arrays.toString().

List<Object> list = getHouseInfo(); 
for (int i=0; i<list.size; i++){ 
    Object[] row = (Object[]) list.get(i); 
    System.out.println("Element "+i+Arrays.toString(row)); 
} 
0

Gracias a todos por sus respuestas. La buena solución fue utilizar el método 'cerebro':

List<Object> list = getHouseInfo(); 
for (int i=0; i<list.size; i++){ 
Object[] row = (Object[]) list.get(i); 
System.out.println("Element "+i+Arrays.toString(row)); 
} 

Problema resuelto. Gracias de nuevo.

+0

Si está contento, acepte su respuesta. – GaryF

3

hacer como esto

List<Object[]> list = HQL.list(); // get your lsit here but in Object array 

su consulta es: "SELECT houses.id, addresses.country, addresses.region, ..."

for(Object[] obj : list){ 
String houseId = String.valueOf(obj[0]); // houseId is at first place in your query 
String country = String.valueof(obj[1]); // country is at second and so on.... 
....... 
} 

esta manera se puede conseguir el mezclado objetos con facilidad, pero debe saber de antemano en qué lugar está el valor que está obteniendo o simplemente puede verificar imprimiendo los valores para saber. perdón por el mal inglés Espero que esta ayuda

Cuestiones relacionadas