做項目裡遇到jstl訪問HashMap裡的對象,網路上一般的常式無法滿足.
網路上一般是
<%
Map<String,String> map2 = new HashMap();
map2.put("a","hello world");
map2.put("b","this is map");
request.setAttribute("map2",map2);
%>
<br>
索引值對遍曆<br>
<c:forEach var="item" items="${map2}">
${item.key} > ${item.value} <br>
</c:forEach>
這上面都是比較簡單的使用.
我的代碼大致如下
<%
..........
List li = call.execProcedure(obj, SendUpdateFile.class);
List<SendUpdateFile> list = new ArrayList<SendUpdateFile>();
// 遍曆集合
for (int i = 0; i < li.size(); i++) {
SendUpdateFile ui = (SendUpdateFile) li.get(i);
list.add(ui);
//System.out.println(ui.toString());
}
Pagination p = new Pagination();
p.setIndex(tmpcurrPage);
p.setPageSize(tmppageSize);
p.setTotle(call.getTotle());
p.setData(list);
request.setAttribute("upFiles", p);
........
HashMap<String, DealerBaseINF> list1 = new HashMap<String, DealerBaseINF>();
// 遍曆集合
for (int i = 0; i < li1.size(); i++) {
DealerBaseINF ui = (DealerBaseINF) li1.get(i);
list1.put("" + ui.getId(), ui);
}
request.setAttribute("dealers", list1);
%>
........
<td size="130px" align="left"><select name="delear" id="delear"
style="width: 120px;">
<option>請選擇上遊客戶</option>
<c:forEach items="${dealers}" var="item">
<option value="${item.key}">${item.value.name}</option>
</c:forEach>
</select> <font color="red">*</font>
</td>
.........
<c:forEach items="${upFiles.data}" var="li">
<tr>
<td align="center" class="tab_r1"><%=++i%></td>
<td style="" align="center" width="10%" class="tab_r1"><input
type="checkbox" id="rowId" name="rowId" value="${li.id}" /></td>
<td align="center" class="tab_r1">
<c:choose>
<c:when test="${li.delear > 0}">
${dealers[li.delear].name}
</c:when>
<c:otherwise>
無效上遊客戶
</c:otherwise>
</c:choose>
<td align="left" class="tab_r1"> ${li.fileName }</td>
<td align="center" class="tab_r1">${li.ftpUpTime }</td>
<td align="center" class="tab_r1">${li.disFlag }</td>
<td align="center" class="tab_r1">${li.upOptor }</td>
</tr>
</c:forEach>
下面重點說
1: <c:forEach items="${dealers}" var="item">
<option value="${item.key}">${item.value.name}</option>
2: ${dealers[li.delear].name}
item.value返回的 DealerBaseINF 對象, .name是DealerBaseINF的一個屬性.
delear在資料執行個體中是DealerBaseINF主鍵的FK 外部應用鍵.
${dealers[li.delear].name}表達意思就根據動態傳入的外部參考鍵,擷取
對應的名稱.
思路來源於
如果知道key就直接寫${map.key}如果key是一個變數就寫成${map[key]}例如:map.put("name", "zhang san");String tempVal = "name";${map.name}${map[tempVal]}
由於[號內的值可以動態變化]所以就容易獲得.
由於對jstl不是掌握太熟悉 其中我 測試了 ${dealers.$li.dealer.name},
${dealers[$li.dealer].name}, ${dealers["$li.dealer"].name},均
不對,當然有些直接是錯誤的寫法,反正測試,測試,終於些正確了.
以後對訪問複雜jstl有很大協助.