開發項目中,遇到一個需求,大致要達到的效果如此
有一個user對象,里頭有個list<map<Stirng,String>>的屬性
現在在遍歷user的同時,來遍歷解析這個map,由於需要取出map的key和vlaue,問過德哥(一同事)曰無法解析到map的Key
讓我是在無語
之后采用腳本的方式解析
代碼如下
1 <select name="classify" id="classify" data-mini="true"> 2 <option> 3 請選擇 4 </option> 5 <% 6 for (Iterator iterator = classifyList.iterator(); iterator 7 .hasNext();) { 8 FlowWorkTreeInfo parent2 = (FlowWorkTreeInfo) iterator.next(); 9 %> 10 <optgroup label="<%=parent2.getText()%>"> 11 12 <% 13 List<FlowWorkTreeInfo> child = parent2.getChildTree(); 14 if (ListUtils.isNotEmpty(child)) { 15 for (Iterator iterator2 = child.iterator(); iterator2 16 .hasNext();) { 17 FlowWorkTreeInfo c = (FlowWorkTreeInfo) iterator2 18 .next(); 19 %> 20 <option value="<%=c.getId()%>" 21 <%if(c.getId().equals(info.getClassify())){%> 22 selected="selected" <%} %>><%=c.getText()%></option> 23 <% 24 } 25 } 26 %> 27 </optgroup> 28 <% 29 } 30 %> 31 </select>
不需要深入了解其中的對象表示的意義,但是大致明白到頁面是如此的不堪
再次調戲了度娘,發現是可以達到這個需求的,順便鄙視下德哥,誤導了偶^-^
這里簡化下代碼
java部分
1 public class User { 2 3 private String username; 4 private String userid; 5 private List<User>userList; 6 private Map<String , String>map; 7 8 //此處省去set和get方法 9 10 }
1 List<User>list=new ArrayList<User>(); 2 List<User>list2=new ArrayList<User>(); 3 for (int i = 1; i < 4; i++) { 4 User user=new User() 5 ; 6 user.setUserid(""+i); 7 user.setUsername("name_"+i); 8 for (int j = 2; j < 4; j++) { 9 User user2=new User() 10 ; 11 Map map1=new HashMap<String, String>(); 12 map1.put("v", 88); 13 user2.setMap(map1); 14 user2.setUserid(""+i+"_"+j); 15 user2.setUsername("name_"+i+"_"+j); 16 list2.add(user2); 17 } 18 Map map=new HashMap<String, String>(); 19 map.put("v", i); 20 user.setMap(map); 21 user.setUserList(list2); 22 list.add(user); 23 24 25 } 26 request.setAttribute("list", list);
JSP解析
1 <div style="width: 100%" > 2 <c:forEach items="${list}" var="users"> 3 <div style="background-color: red;">${users.username } --${users.map.v} </div> 4 <c:forEach items="${users.map}" var="m"> 5 <div style="background-color: yellow;">${m.key }--${m.value }</div> 6 7 </c:forEach> 8 <c:forEach items="${users.userList}" var="user"> 9 <div style="background-color: blue;">${user.username }--${user.map.v }</div> 10 11 </c:forEach> 12 </c:forEach> 13 </div>
效果圖
這里順便提一句,由於是demo,所以沒有對變量的命名等一些java的規范進行約束,希望朋友,特別是初學者仍然可以堅持規范
${processDefinitionMap[processDefinitionId].name} --processDefinitionMap表示一個Map processDefinitionId是一個對象,name則是processDefinitionId的
一個屬性
附雙層迭代map的代碼
<c:forEach var="firstMap" items="${map}"> <c:forEach var="secondMap" items="${firstMap.value}"> //${firstMap.value}為第一層map的值 <c:out value="${secondMap.key}"/> //第二層map的鍵 <c:out value="${secondMap.value}"/> //第二層map的值 </c:forEach> </c:forEach>
先到此吧,需要去修改惡心的腳本了
還有偶滴android 哥來鳥!!