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 哥来鸟!!

 

posted @ 2012-11-06 00:39  draem0507  阅读(9867)  评论(0编辑  收藏  举报
View Code