緣由
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"%>這個標籤庫。