2010-11-08 4 views
8

Я новый в Java и имею проблему с отображением данных из списка объектов. У меня есть простой метод, который должен собирать данные по нескольким таблицам и вернуть его в мой контроллер:Как получить данные из списка <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;} 

Теперь я хочу, чтобы получить эти данные в контроллере, но я не знаю, как получить единичные результаты от список. Я пытался сделать что-то вроде этого:

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

но I`m получать только ссылки на эти объекты (например, [Ljava.lang.Object; @ 167a47b). Я также пытался использовать Iterator, но результат тот же. Я пытался использовать такой код:

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

но это Безразлично `помочь мне тоже - это заканчивается ошибкой компиляции.

Может ли кто-нибудь сказать мне, как получить «id» (целочисленное значение) из этого списка? I`m с помощью MyFaces в моем «View», где у меня есть такой код (houseControll этого имя моего JSF Managed Bean - контроллер):

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

этот код показывает значение «ID» правильно - У меня 1,2,3, ... значения. Как я могу получить тот же результат в моем контроллере? Как распечатать данные в контроллере?

ответ

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

Должно быть

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

Чтобы использовать теги JSF, вы даете значение DataList приписывать ссылку на свой список элементов, а атрибут вара является локальным именем для каждого элемента этого списка в очереди. Внутри DataList, можно использовать свойство объекта (добытчики) для вывода информации о том, что отдельном объекте:

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

Вы должны попробовать что-то вроде этого

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

или если у вас есть значение объект Дома результат запроса одного и того же типа, то

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

Для начала вы не Перебор списка результатов должным образом, вы не с помощью индекса я вообще. Попробуйте что-то вроде этого:

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

Похоже, запрос reutrns списка массивов объектов, поскольку массивы не являются собственными объектами, которые переписывают ToString вам нужно сделать бросок первым, а затем использовать 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

Спасибо всем за ваши ответы. Хорошим решением было использование метода «мозга»:

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

Если вы счастливы, примите его ответ. – GaryF

3

ли как этот

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

вашего запроса: "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.... 
....... 
} 

таким образом, вы можете получить смешанный объекты с легкостью, но вы должны заранее знать, в каком месте вы получаете то или иное значение, или можете просто проверить, напечатав значения, которые нужно знать. извините за плохой английский Я надеюсь, что эта помощь

Смежные вопросы