2010-10-27 30 views
3

我有一個變量從映射到枚舉的彈簧控制器傳遞到我的JSP視圖。它正在'ENUM_VALUE'打印出來,不是很方便用戶。EL枚舉字符串處理

什麼是最好的方式來將其轉換爲更可讀的形式,如「枚舉值」。

我寧願一個純粹的EL解決方案,以避免在控制器寫更多的代碼來解析這個,但所有的意見都表示讚賞。

回答

5

該值來自Enum#name()方法。只需在你的枚舉中添加一個getter,返回友好的名字。例如。

public String getFriendlyName() { 
    return name().toLowerCase().replace("_", " "); 
} 

您可以在EL中使用它,如${bean.someEnum.friendlyName}

+3

在2.1 JSP-EL(2006年5月8日)規範$ {} myEnum不會調用toString()方法。在2.1 JSP-EL規範的第1.18.2節中,您可以看到它將調用name()方法。這與2.2 JSP-EL規範相同。 – Kacper86 2013-07-01 08:26:40

+0

Like @ Kacper86 toString不起作用,請改用getter方法 – VDev 2014-08-06 19:26:05

+0

@VDev:我解決了答案。 – BalusC 2014-08-06 19:40:15

1

我會爲每個枚舉添加一個描述文字,當你定義它們時。像這樣的東西。

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

0

像Kacper86說,2.1規範說,枚舉到字符串脅迫應該調用.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的任何實例。

-1

你可能只是做這樣的事情在JSP中:

<span>${myenum.toString()}</span>