簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM