EL表示式怎麼獲取Map的動態key?

Gin.p發表於2015-12-19

 緣由 

  El表示式在呼叫Map的時候,後臺傳過來的Map的key不一定是一個固定的值,需要根據另外一個物件的id作為key來put,或者更加複雜的組合id+"string"作為一個key,對於平常使用開固定的key的我來說,以前學過也忘記了,一時想不出怎麼做,現在我們來複習一下。

 情景

  假設有一個情景:我們後臺返回一個物件的list,我們根據物件的id作為key放一些關鍵的值作為value存入Map中。而前臺負責顯示Map中的關鍵指標。

@RequestMapping(value="/test")
public String test(Model m){
      List<Student> lists = service.getAll();
      Map<String,String> map = new HashMap<String,String>();

      for(Student s : lists){
          if(s.getScore() > 80)
              map.put(s.getId(),"良");
     }

      m.addAttribute("lists", lists);
      m.addAttribute("map", map);   
      
      return "index";  
}

  沒錯,我們的目的就是將大於80分的同學顯示評級為良。接下來是前端的處理。

  先引入,標籤。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  主體內容:

<table>
    <tr>
      <td>姓名</td>
      <td>分數</td>
      <td>評級</td>
    </tr> <c:forEach items="${lists }" var="s"> <tr> <td>${s.name }</td> <td>${s.score}</td> <td>${map[s.id]}</td> </tr> </c:forEach> </table>

  大概就是這樣子。如果map的key是一個複雜的組合,例如map(s.getId()+"-3班","良");這樣子要怎麼獲取key呢?同樣是上面的程式碼:

<table>
    <tr>
      <td>姓名</td>
      <td>分數</td>
      <td>評級</td>
    </tr>
    <c:forEach items="${lists }" var="s">
    <c:set var="sid" value="${s.id }${-3班}"></c:set> <tr> <td>${s.name }</td> <td>${s.score}</td> <td>${map[sid]}</td> </tr> </c:forEach> </table>

  如果要對字串做更復雜的操作,可以自己做標籤庫,或者使用<%@  taglib  uri="http://java.sun.com/jsp/jstl/functions"   prefix="fn"%>這個標籤庫。

   

相關文章