jsp之jstl 解析Map
开发项目中,遇到一个需求,大致要达到的效果如此
有一个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 哥来鸟!!