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()
。
哪裏會'的toString()'找到用於檢索適當的本地化消息的語言環境? –
我會去的'getLabel()',因爲它可以代表它的語義在這種情況下更好。 'toString()'的語義沒有真正定義,其大部分用於調試。 – JimmyB
@JBNizet它目前正在從JSF的viewRoot中獲取語言環境。這肯定是不好的設計,並會回退到我在其他地方可用的當前登錄用戶的存儲區域設置。 – mabi