2016-01-14 1 views
0

У меня есть данные в следующем формате.Вывод карты <String, Map <String, List <String> >> в jsp с помощью jstl

Map<String, Map<String,List<String>>> 

пример - {ProfileAdaptarRepository={active=[true,false,true,true]}}}

я установить контекст страницы в mymap в ниже скриптлетах и ​​работает абсолютно нормально.

<% pageContext.setAttribute("mymap",example);%> 

мне нужны данные в формате HTML ниже таблицы:

enter image description here

Пример исходного HTML код на картинке выше.

<html> 
 
<body> 
 
<table border="1"> 
 
\t \t <tr> 
 
\t \t \t <th>Component</th> 
 
\t \t \t <th>Properties</th> 
 
\t \t \t <th>J01</th> 
 
\t \t \t <th>J02</th> 
 
\t \t \t <th>W01</th> 
 
\t \t \t <th>W02</th> 
 

 
\t \t </tr> 
 
\t \t <tr> 
 
\t \t \t <td>StoreConfiguration</td> 
 
\t \t \t <td>active</td> 
 
\t \t \t <td>true</td> 
 
\t \t \t <td>false</td> 
 
\t \t \t <td>true</td> 
 
\t \t \t <td>false</td> 
 

 
\t \t </tr> 
 
\t \t 
 
\t \t <tr> 
 
\t \t \t <td>DynamoConfiguration</td> 
 
\t \t \t <td>enabled</td> 
 
\t \t \t <td>true</td> 
 
\t \t \t <td>false</td> 
 
\t \t \t <td>true</td> 
 
\t \t \t <td>false</td> 
 

 
\t \t </tr> 
 
</table> 
 
    
 
</body> 
 
</html>

Я попытался представить вышеуказанные данные в веб-страницы, используя приведенную ниже jstl код, но он не работает для множества значений компонентов (более 1 компоненты)

<c:forEach var = "comp" items="${mymap}"> 
    <tr> 
     <td>${comp.key}</td> 
     <c:forEach var="prop" items="${comp.value}"> 
      <td>${prop.key}</td> 
      <c:forEach var="val" items="${prop.value}"> 
        <td>${val}</td> 
      </c:forEach> 
     </c:forEach> 
    </tr> 
</c:forEach> 

Может ли кто-нибудь помочь или помочь мне в достижении желаемого табличного формата?

Большое спасибо заранее .. :)

+3

Обычно считается неправильной практикой использования действительно вложенных коллекций (Карта >>). Это не будет доступно для всех, кто работает над кодом в будущем. Черт, через шесть месяцев, когда вы вернетесь к этому коду, вы можете не помнить, что он делает. Я настоятельно рекомендую изменить структуру данных на фактические классы (даже если она такая же общая, как строка и столбец). Это поможет вам выполнить итерацию в ваших списках forEach. –

+0

@ Allen, Большое спасибо за ваши взгляды. Я согласен с тобой, это плохой код. На самом деле это не веб-страница, которая не меняется, поэтому я оказался в этом беспорядке, и этого должно быть достаточно, чтобы иметь дело с исходным кодом Java. Я не могу вернуться и изменить исходный код java, поскольку я потратил много времени на форматирование этой карты. Таким образом, было бы очень полезно, если вы передадите мне решение. Я относительно новичок в Java-программировании ... :) спасибо .. – harshavmb

+2

@harshavmb. Вы потратите гораздо больше времени, пытаясь вывести его или попытаться внести изменения в будущем, например, для сортировки. Итак, будет лучше, если вы используете список простых объектов DTO. Один объект в строке таблицы. –

ответ

0

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

 List<String> myListStore = new ArrayList<>(); 
     List<String> myListDynamo = new ArrayList<>(); 
     List<String> myListProfile = new ArrayList<>(); 
     Map<String, List<String>> myMapStore = new HashMap<>(); 
     Map<String, List<String>> myMapDynamo = new HashMap<>(); 
     Map<String, List<String>> myMapProfile = new HashMap<>(); 
     Map<String, Map<String, List<String>>> myBigMap = new HashMap<>(); 

     myListDynamo.add("true"); 
     myListDynamo.add("false"); 
     myListDynamo.add("true"); 
     myListDynamo.add("false"); 
     myMapDynamo.put("enabled", myListDynamo); 
     myBigMap.put("Dynamo", myMapDynamo); 

     myListStore.add("true"); 
     myListStore.add("false"); 
     myListStore.add("true"); 
     myListStore.add("true"); 
     myMapStore.put("disabled", myListStore); 
     myBigMap.put("Store", myMapStore); 

     myListProfile.add("true"); 
     myListProfile.add("false"); 
     myListProfile.add("true"); 
     myListProfile.add("true"); 
     myMapProfile.put("disabled", myListProfile); 
     myBigMap.put("Profile", myMapProfile); 

     request.setAttribute("mymap", myBigMap); 

Я использовал ваш точный код jstl и смог создать таблицу. Вы уверены, что ваши данные находятся в правильном формате в структуре данных?