我有一个像
的枚举public enum InventoryStatus {
IN_USE,
RE_USED,
STOCK_OLD,
STOCK_NEW,
SCRAPPED
}
和HashMap的值类似(比如来自db)
Map<InventoryStatus, Long> statusMap = new HashMap<InventoryStatus, Long>
{IN_USE=3, SCRAPPED=2, RE_USED=2, STOCK_NEW=2}
所以现在我想要的是,我需要使用key(枚举类型)获取值
类似
<td>${statusMap[inventoryStatus.STOCK_NEW]}</td> //not correct throwing numberformat exception
其中statusMap是hashmap属性,inventoryStatus是我在控制器中添加的枚举
model.addAttribute("statusMap", statusMap);
model.addAttribute("inventoryStatus", InventoryStatus.values());
我在jstl中操纵地图中的枚举时遇到麻烦 所以,请有人帮助我。
答案 0 :(得分:0)
inventoryStatus
的类型为InventoryStatus[]
,正如您在模型中定义的那样:
model.addAttribute("inventoryStatus", InventoryStatus.values());
但您使用此模型属性,因为它是InventoryStatus
实例:
<td>${statusMap[inventoryStatus.STOCK_NEW]}</td>
相反,你应该写这样的东西:
<td>${statusMap[inventoryStatus[3]}</td>
因为inventoryStatus
是InventoryStatus
的数组。
答案 1 :(得分:0)
此解决方案对于想要检查一个或两个枚举值的人有用
<c:forEach items="${inventoryStatus}" var="status">
<c:if test="${status == 'STOCK_NEW'} ">
<td>${statusMap[status] eq null ? 0 : statusMap[status]}</td></c:if>
</c:forEach>
<c:forEach items="${inventoryStatus}" var="status">
<c:if test="${status == 'IN_USE'} ">
<td>${statusMap[status] eq null ? 0 : statusMap[status]}</td></c:if>
</c:forEach>
但是如果我们想检查所有可用的枚举值,那将是一个糟糕的代码。
无论如何都要检查密钥并获取没有这些for循环以及情况的值。