2016-10-06 6 views
0

Предположим, что я реализую модель MVC, есть объект List, который содержит данные из базы данных, где я получаю, используя JPA в сеансовом компоненте и передаю сервлет. Затем объект List переходит к jsp из сервлета. Поскольку мне нужно отображать его в таблице в JSP с помощью JSTL, в базе данных имеется много столбцов 40 ++.Как получить имя столбца и элементы в массиве по столбцам в JSTL

Как отобразить его, вызвав индекс столбцов вместо имени столбца, чтобы я мог его закодировать, а не печатать имя столбца? Моя основная идея заключается в том:

<table> 
<tr> 
    <c:forEach var="i" begin="1" end="49" items="${listObject}"> 
     <td>${//here to loop listObject column name by index}</td> 
    </c:forEach> 
</tr> 
<c:/forEach item="${listObject}" var="a"> 
<tr> 
    <c:forEach var="i" begin="1" end="49"> 
    <td>${//here to loop listObject data by column index}</td> 
    </c:forEach> 
</tr> 
</c:forEach> 
</table> 

Так что результат будет, как:

stu ID | First Name | Last Name | Attendance Week 1| ...... | Attendance Week 46 
----------------------------------------------------------------------------------- 
     |   |   |     |  | 
     |   |   |     |  | 
     |   |   |     |  | 
     |   |   |     |  | 

Это невозможно для меня типа из колонки 1 к колонку 40 ++, поэтому я хотел бы использовать зацикливание , кто может помочь?

+0

для элемента, просто взгляните на первый вопрос http://stackoverflow.com/questions/39866370/jstl-loop-by-column-index. – AxelH

+0

Для имени столбца вы можете создать массив с именами или в одной коллекции в первой строке. – AxelH

+0

Спасибо, да, для имени столбца вы правы, я могу вставить в первую строку в базе данных. Однако, приходите к элементу, как вы предлагаете, чтобы получить элемент в определенной позиции в массиве. Используйте c [0], чтобы получить первый элемент в массиве c вместо вызова элемента в первом столбце. – helloworld1234

ответ

1

Для этого вам понадобится «отражение».
Основная идея заключается в том, что:

  • перебрать полей/свойств объекта.
  • создать список строк, называемый fieldValueList, который имеет все значения свойств. Каждому элементу списка listObject будет нужно иметь соответствующий fieldValueList.
  • В JSTL просто сверните объект listObject, а затем зациклируйте fieldValueList.

Вот еще один интересный вопрос.
How to loop over a Class attributes in Java?

Не относится к вашему вопросу, вы можете рассмотреть вопрос о рефакторинг/нормализовать таблицу таким образом, чтобы ваша таблица не содержит жесткий кодированный «Посещаемость недели» от 1 до 46, так что вам не нужно иметь дело с отражением на этом казалось бы, простая проблема.

+0

Как бы вы использовали Reflection в JSTL? Или вы предлагаете добавить Java в JSP? – AxelH

+0

@AxelH создайте список строк с именем 'fieldValueList', который имеет все значения свойств. Каждому элементу 'listObject' op должен быть соответствующий' fieldValueList'. В JSTL просто зациклируйте 'listObject', а затем зациклируйте' fieldValueList'. Тот факт, что таблица базы данных op имеет что-то вроде Attendance с 1 по 49, заставляет меня думать, что она нуждается в нормализации, но это другая проблема. –

+0

Да, я рассматривал нормализацию, так как некоторые проблемы дизайна, мне лучше жестко закодировать список посещаемости. Кстати спасибо за помощь. Является ли эта ссылка той же идеей, которую вы хотите решить? [http://stackoverflow.com/a/160976/5614753] – helloworld1234

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

  • Нет связанных вопросов^_^