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

     

  • 相关阅读:
    上传文件过大的问题FileUploadBase$SizeLimitExceededException
    Oracle分页2
    详解struts2中struts.properties
    Oracle 分页
    Xcode常见错误以及解决方案
    设置时间格式
    UIScrollView解决touchesBegan等方法不能触发的解方案
    ViewController 之间设置转场动画
    IQKeyboredManager使用
    SVN
  • 原文地址:https://www.cnblogs.com/draem0507/p/2756233.html
Copyright © 2020-2023  润新知