2013-07-18 21 views
1

今天,我有一個風格問題:由於下面的代碼,我應該重寫Enum#toString()呈現應用程序用戶的本地化字符串或切換到自定義功能(比如,getLabel())或者是有沒有達到同樣的效果的另一種方法?我應該重寫Enum.toString()來定位一個枚舉的標籤?

我主要住在這裏乾的,所以硬編碼的資源包前綴之後,是不是一種選擇。

我有一個簡單枚舉是這樣的:

public enum DUE_DATE { 
    START, 
    PRESENTED; 

    public String toString() { 
     return DBResBundle.instance().getString("due_date_lbl_" + name()); 
    } 
} 

其中DBResBundle是我的資源包的實現,我可以爲msg訪問JSF像這樣:我還使用

<h:selectOneMenu value="#{m.due_date}" id="due"> 
    <f:selectItems value="#{dueDates}" var="d" 
    itemLabel="#{msg['due_date_lbl_'.concat(d.name())]}" /> 
</h:selectOneMenu> 

的了代碼枚舉(不僅僅是JSF)上下文,但我不在那裏使用toString()

+2

哪裏會'的toString()'找到用於檢索適當的本地化消息的語言環境? –

+0

我會去的'getLabel()',因爲它可以代表它的語義在這種情況下更好。 'toString()'的語義沒有真正定義,其大部分用於調試。 – JimmyB

+0

@JBNizet它目前正在從JSF的viewRoot中獲取語言環境。這肯定是不好的設計,並會回退到我在其他地方可用的當前登錄用戶的存儲區域設置。 – mabi

回答