【问题标题】:Call HashMap from jsp EL?从 jsp EL 调用 HashMap?
【发布时间】:2010-06-13 15:57:37
【问题描述】:

这是我的实体类

 public enum UnitType {

    HOSPITAL, HEALTHCENTER
}
public static LinkedHashMap<UnitType, String> unitType = new LinkedHashMap<UnitType, String>() {
    {
        put(UnitType.HEALTHCENTER, "Κέντρο Υγείας");
        put(UnitType.HOSPITAL, "Νοσοκομείο");
    }
};

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String address;
    @Column(columnDefinition = "TEXT")
    private String info;
    @Enumerated(EnumType.STRING)
    private UnitType type;

在我的jsp

                       <c:forEach var="unit" items="${requestScope.units}">
                        <tr>
                            <td>${unit.id}</td>
                            <td>${unit.name}</td>
                            <td>${unit.address}</td>
                            <td>??!?</td>
                            <td><a href="#">Περισσότερα</a></td>
                        </tr>
                    </c:forEach>

如何将枚举的文本值放在 ??!? .. 任何想法? 尝试了一些方法,但没有任何效果..

【问题讨论】:

    标签: java jsp el


    【解决方案1】:

    不能直接完成。您必须编写一些代码来将枚举转换为字符串 - 也许将其添加到实体类中:

    @Transient
    public String getTypeName() {
        return unitType.get(getType());
    }
    

    【讨论】:

    • 其实我也做过,但是忘记了。从纯粹的设计角度来看,它并不理想,但它确实有效且简单。
    【解决方案2】:

    最简单的方法是覆盖枚举中的 toString 并将 ${unit.type} 放入 JSP 中。

    另一种方法是设置一个 EL 函数,该函数接受 UnitType 并返回映射中的值。

    【讨论】:

    • 不走运 :( 我忽略了 toString() 方法,但什么也没有……它一直返回常量值
    【解决方案3】:

    unitType 映射添加一个getter,以便您可以按如下方式访问它:

    ${unit.unitType[unit.type]}
    

    这是否有效取决于所使用的 EL 实现。在 JSP 2.1 EL (Java EE 5) 上,这应该不会带来任何麻烦。

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2011-09-17
      • 2011-07-18
      • 2023-03-04
      相关资源
      最近更新 更多