通过密钥获取哈希映射的值,这是EL中的ENUM

时间:2016-01-28 07:36:48

标签: jsp spring-mvc enums el

我有一个像

的枚举
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中操纵地图中的枚举时遇到麻烦 所以,请有人帮助我。

2 个答案:

答案 0 :(得分:0)

inventoryStatus的类型为InventoryStatus[],正如您在模型中定义的那样:

model.addAttribute("inventoryStatus", InventoryStatus.values());

但您使用此模型属性,因为它是InventoryStatus实例:

<td>${statusMap[inventoryStatus.STOCK_NEW]}</td>

相反,你应该写这样的东西:

<td>${statusMap[inventoryStatus[3]}</td>

因为inventoryStatusInventoryStatus 的数组。

答案 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循环以及情况的值。