在我的頁面doGet上,我設置了一些默認屬性。JSTL哈希映射和動態密鑰
private static final CategoryFactory cf = CategoryFactory.getInstance();
public static void setupHeader(HttpServletRequest req) {
ArrayList<String> catagories = cf.getPrimaryCategories();
Map<String, ArrayList<String>> categoryMap = cf.getCategoryMap();
User user = UserUtils.getUserSession(req);
req.setAttribute("catagories", catagories);
req.setAttribute("categoryMap", categoryMap);
req.setAttribute("isAdmin", UserUtils.isAdmin(user));
if (user != null) {
req.setAttribute("orderCount", user.getOrderCount(false));
req.setAttribute("unreadMessageCount", user.getUnreadMessageCount());
req.setAttribute("cartTotal", user.getShoppingCart().getTotal());
}
}
然後在我的JSP頁面上,我嘗試使用基於Map關鍵字的類別來處理categoryMap。
<c:forEach var="cata" items="${catagories}">
<li class="dropdown-submenu"><a tabindex="-1" href="#"><c:out value="${cata}" /></a>
<ul class="dropdown-menu" role="menu">
<c:forEach var="secCategories" items="${categoryMap['cata']}">
<c:forEach var="second" items="${secCategories}">
<li role="presentation"><a role="menuitem"
href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
value="${second}" /></a></li>
</c:forEach>
</c:forEach>
</ul></li>
</c:forEach>
我得到的錯誤是
警告:嵌套在javax.servlet.ServletException: javax.servlet.jsp.JspException:javax.el.PropertyNotFoundException: 找不到屬性[航空&起重設備類 java.lang.String中:javax.el.PropertyNotFoundException:類java.lang.String找不到 財產[空中&起重設備
其中「[Aerial &起重設備」是變量類別中的第一個鍵,並設置爲新變量$ {cata}。由於這不起作用,我錯過了如何正確傳遞動態密鑰。
SOLUTION
這個固定我的問題,我設置的屬性類型,我才忘了,爲了便於使用,我改變了ArrayList中爲String []。
<%@attribute name="user" required="true" type="com.entity.User"%>
<%@attribute name="catagories" required="true" type="java.lang.String[]"%>
<%@attribute name="categoryMap" required="true" type="java.util.Map"%>
<c:forEach var="cata" items="${catagories}">
<li class="dropdown-submenu"><a tabindex="-1" href="#"><c:out value="${cata}" /></a>
<ul class="dropdown-menu" role="menu">
<c:forEach var="secCategories" items="${categoryMap[cata]}">
<c:forEach var="second" items="${secCategories}">
<li role="presentation"><a role="menuitem"
href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
value="${second}" /></a></li>
</c:forEach>
</c:forEach>
</ul></li>
</c:forEach>
檢查你的HashMap?它是否具有針對關鍵空中和起重設備的ArrayList? – 2015-03-13 10:17:21
@alfreema'catagories = [空中起重設備,瀝青及混凝土設備,附件,壓實設備,建築設備,土方設備,林業和採礦設備]' categoryMap = {Aerial&Lifting Equipment = [All Terrain Crane,叉車,叉車,液壓汽車起重機,物料搬運車,人員舉升機,越野起重機,剪叉式升降機,伸縮臂叉裝車,伸縮式叉車],林業與採礦設備= [履帶式拖拉機,伐木歸堆機,轉運機,鏟子,集材機,輪式推土機,輪式裝載機]} – JWL 2015-03-13 17:43:52