![](/img/trans.png)
[英]Best practice of retrieving the String value of an Enum on the webpage using EL
[英]EL enum string processing
我有一個變量從一個映射到枚舉的spring控制器傳遞給我的JSP視圖。 它打印在'ENUM_VALUE',不是非常用戶友好。
將此轉換為更易讀的形式(如“枚舉值”)的最佳方法是什么。
我寧願使用純粹的EL解決方案,以避免在控制器中寫入更多代碼來解析它,但所有評論都表示贊賞。
該值來自Enum#name()
方法。 只需在枚舉中添加一個getter,它返回友好名稱。 例如
public String getFriendlyName() {
return name().toLowerCase().replace("_", " ");
}
您可以在EL中使用它,如${bean.someEnum.friendlyName}
。
當你定義它們時,我會為每個枚舉添加一個描述文本。 像這樣的東西。
public enum MyEnum {
ENUM_VALUE("your friendly enum value");
private String description;
//constructor
private MyEnum(String description) {
this.description = description;
}
//add a getter for description
}
你的EL看起來像$ {yourenum.description}
就像Kacper86所說的那樣,2.1規范說Enum-to-String強制應該調用.name()
而不是toString()
。 我無法得到BalusC的工作答案。
就個人而言,我更喜歡使用EL函數而不是將getDescription
方法添加到我的枚舉中。 我發現我通常總是覆蓋toString()
方法,所以添加另一個方法來獲得相同的值似乎是一個糟糕的設計。 如果我在Java中工作,我只需要調用toString()
,所以我的問題僅在於EL領域。 此外,EL功能使您無需在每次要在網頁上打印新的枚舉時修改枚舉類; 你只需要為任何枚舉重用你的EL函數。
這是創建EL函數的一些簡單代碼:
public final class JSTLUtilityFunctions
{
public static String enumToStr(Enum<?> enumInst) {
return enumInst.toString();
}
}
在您的TLD中:
<taglib>
<!-- Other stuff... -->
<function>
<name>enumToStr</name>
<function-class>yourpackage.JSTLUtilityFunctions</function-class>
<function-signature>java.lang.String enumToStr(java.lang.Enum)</function-signature>
</function>
</taglib>
用法:
<%@taglib prefix="util" uri="your-TLD-uri.tld" %>
<span>${ util:enumToStr(myEnumInstance) }</span>
顯然,如果需要,您可以更改方法簽名以接受任何Object
實例。
你可以在jsp中做這樣的事情:
<span>${myenum.toString()}</span>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.