我有一个LinkedHashMap
,如下所示 -
LinkedHashMap<String, ArrayList<MSCategoryDetailsBO>> categoryMap =
new LinkedHashMap<String, ArrayList<MSCategoryDetailsBO>>();
MSCategoryDetailsBO类似于categoryIsSelected, 类别名称..
当我尝试使用JSTL在JSP上迭代此映射时,如下所示 -
<c:forEach items="${CategoryMap}" var="item1" varStatus="status">
<c:set var="categoryList" value="${item1.value}" />
<c:forEach items="${categoryList}" var="item2" varStatus="status"
begin="0" end="9">
<c:if test="${(item2.categoryIsSelected eq false) ||
(empty item2.categoryIsSelected)}">
${item2.categoryName}
</c:if>
</c:forEach>
</c:forEach>
但我正在
E /MSGenericJSPPageError.jsp - Property&#39; categoryIsSelected&#39;不 在类型java.util.LinkedHashMap $ LinkedHashMapEntry上找到 javax.el.PropertyNotFoundException:Property&#39; categoryIsSelected&#39;在类型上找不到 java.util.LinkedHashMap $ LinkedHashMapEntry at javax.el.BeanELResolver $ BeanProperties.get(BeanELResolver.java:200) 在 javax.el.BeanELResolver $ $ BeanProperties.access 400(BeanELResolver.java:177)
答案 0 :(得分:0)
当您遍历Map时,您将获得Map.Entry对象(您可以在堆栈跟踪中看到它正在 java.util.LinkedHashMap $ LinkedHashMapEntry上查找您的属性 object)。您可以使用&#39; type&#39;来访问密钥。以及&#39;值&#39;。
的值因此,对于您的代码,可以尝试 item2.value.categoryIsSelected 。
答案 1 :(得分:0)
确保
MSCategoryDetailsBO
公共类,并为JSP中所需的所有属性/成员包含有效的 getter / setter 。JSTL使用反射,以便您可以通过点表示法访问对象的属性,如果它们遵循 JavaBean命名约定。
从Exception本身可以清楚地看出,您尝试访问的属性没有匹配的getter方法。
PropertyNotFoundException: Property 'categoryIsSelected' not found on type
班级MSCategoryDetailsBO
应如下所示:
public class MSCategoryDetailsBO {
private boolean categoryIsSelected;
private String categoryName;
public void setCategoryIsSelected(boolean categoryIsSelected) {
this.categoryIsSelected = categoryIsSelected;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public boolean getCategoryIsSelected() {
return this.categoryIsSelected;
}
public String getCategoryName() {
return this.categoryName;
}
}
请再次验证以下条件,表示您希望categoryName
显示categoryIsSelected
为假或空。
<c:if test="${(item2.categoryIsSelected eq false) || (empty item2.categoryIsSelected)}">
${item2.categoryName}
</c:if>
答案 2 :(得分:0)
确保MSCategoryDetailsBO类具有字段的setter和getter:categoryIsSelected,categoryName。 为什么要在第二个forEach循环中放置开始和结束,你确定你的列表大小是10之前的吗?您可以使用varStatus字段获取项目编号:index(从零开始)和count(从1开始)。此外,您不必将arrayList设置为单独的变量。
<c:forEach items="${CategoryMap}" var="item1" varStatus="status1">
<c:forEach items="${item1.value}" var="item2" varStatus="status2">
<c:if test="${(item2.categoryIsSelected eq false) || (empty item2.categoryIsSelected)}">
${item2.categoryName}
</c:if>
</c:forEach>
</c:forEach>