2012-12-18 2 views
3

У меня есть ArrayList из ArrayList - Заявляю это следующим образом:JSF-ArrayList из ArrayList в JSF

ArrayList<ArrayList<String>> queryResult=new ArrayList<ArrayList<String>>(); 

Затем добавить новый элемент в массив, как это:

for(int i=1;i<colNumber;i++) 
     { 
      queryResult.add(new ArrayList<String>(20)); 
     } 

после что я добавить значение элементов массива:

while(r.next()) 
     { 
       for(int i=0;i<colNumber;i++) 
       { 
        queryResult.get(i).add(r.getString(i)); 
       }  
     } 

Но когда я пытаюсь использовать его в DataTable теге Я ничего не вижу :(

<h:dataTable value="#{polaczenieSQL.queryResult}" var="w"> 
      <h:column> 
      <f:facet name="head">typ</f:facet> 
      #{w[0]} 
      </h:column> 

Что я делаю неправильно? Как использовать этот массив в JSF?

Ps это мой faces.config:

 <managed-property> 
     <property-name>queryResult</property-name> 
     <property-class>java.util.ArrayList</property-class> 
     <list-entries></list-entries> 
    </managed-property> 

Я нашел первую проблему:

r.getString(i) 

Я добавил

System.out.print("something") 

после цикла, но это Безразлично Не хотите печатать.

Когда я изменяю переменную «i» и типа например: 4 Я вижу «что-то» на моей консоли. Переменная «colNumber» установлена ​​в 5 (но моя таблица sql имеет 7 столбцов, и я использую «select * from mytable», поэтому я не думаю, что это проблема счетчика).

+0

- это код Java в резервной копии? также, почему вам нужно, чтобы пустая управляемая собственность была настроена в вашей 'faces-config'? – elias

+0

@eljunior: 1) да, весь код java от моего menaged-bean 2) это свойство пустое, потому что я добавляю данные к ней после подключения к серверу sql – ognistysztorm

+1

Вы глотаете исключения где-то? 'ResultSet # getString()' будет бросать 'SQLException: invalid index', когда' 0' передается. Проблема заключается, по крайней мере, в том, что вы не заметили код, опубликованный до сих пор (по крайней мере, не техническая проблема, о которой вы говорите, есть серьезные проблемы с дизайном). Я также не уверен, почему этот вопрос получил 2 upvotes, так как он неопровержимо в его нынешней форме и раскрывает плохие практики. – BalusC

ответ

2

Если вы хотите напечатать все значения во внутреннем списке вы должны сделать следующим образом:

<h:dataTable value="#{polaczenieSQL.queryResult}" var="w"> 
     <h:column> 
     <f:facet name="head">typ</f:facet> 
     #{w[0]} <!--will print the first element in the inner list--> 
     </h:column> 
     <h:column> 
     <f:facet name="head">typ</f:facet> 
     #{w[2]} <!--will print the second element in the inner list--> 
     </h:column> 
     ... 
     <h:column> 
     <f:facet name="head">typ</f:facet> 
     #{w[n]} <!--will print the nth element in the inner list--> 
     </h:column> 
</h:dataTable> 

поэтому в основном, если вы хотите напечатать все значения в внутреннем списке, вы можете использовать следующий стиль:

<ui:repeat value="#{activeUser.listInList}" var="innerList"> 
    <ui:repeat value="#{innerList}" var="innerListValue"> 
     #{innerListValue} 
    </ui:repeat> 
</ui:repeat> 

И об исключении глотания, вы должны бросить исключение, когда вы ловите один, если вы точно не знаете, что вам не хватает.

+0

Спасибо Большое! :) – ognistysztorm

+0

Не могли бы вы объяснить мне, почему есть 2 вложенных ui: repeat loops pls? –

+0

Поскольку OP хочет распечатать каждый элемент в списке списка. Итак, первая итерация для внешнего списка, а затем вы перебираете элементы каждого списка во внешнем списке. – cubbuk

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