在我的页面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