2010-02-05 88 views
2

我想爲標籤的模型是枚舉值的wicket面板添加標籤。根據該枚舉的值,我想顯示從該頁面的屬性文件中拉出的不同消息。使用枚舉從wicket屬性文件中選擇字符串

例如,這裏是一個枚舉:

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED }; 

我可以輕鬆地添加標籤具有此枚舉作爲其型號面板:

add(new Label("approval", new Model(ApprovalType.APPROVED))); 

然而,這只是輸出UNAPPROVED,批准或阻止。我想輸出一個根據此枚舉值選擇的本地化消息。

所以,如果我有這個屬性文件,獲取這些消息輸出的最佳方法是什麼?

UNAPPROVED=Your membership is currently pending approval 
APPROVED=Your membership has been approved 
BLOCKED=You have been blocked from membership 

我能得到像這樣的工作:

add(new Label("approval", new ResourceModel(ApprovalType.APPROVED.name()); 

但問題是,ResourceModel只接受一個字符串(資源鍵)。我想從模型中自動獲取資源鍵值(最好是CompoundPropertyModel)。換句話說,我不想這樣做:

Member member = (Member) getDefaultModelObject(); 
add(new Label("approval", new ResourceModel(member.getApproval().name()))); 

我寧願做這樣的事情:

add(new EnumLabel("approval"); // assuming I have a CompoundPropertyModel 

有沒有做這個自帶的檢票一個組成部分?還是我需要寫我自己的?

最後,我發現這也適用:

add(new Label("approval", new StringResourceModel(
    "${}", 
    new PropertyModel<ApprovalType>(getDefaultModel(),"approval") 
))); 

但這似乎過於冗長,還沒有利用使用CompoundPropertyModel的簡單性。

想法?

回答

4

不知道這要工作,但也許你可以嘗試寫自己的EnumModel類,帶有一個枚舉的值,並返回一個值ResourceModel ..

請這麼說,如果上面不明確夠了,我會盡力詳細說明。

+0

是的,這可能是正確的方向。我找到了一個使用枚舉和國際化的詳細示例(http://wicketbyexample.com/enums-internationalization-with-wicket/)來解釋這個特定的問題。但解決方案非常冗長,我真的在尋找更輕的重量。如果你可以詳細說明你的EnumModel,它會有所幫助。 – Tauren 2010-02-05 22:34:57

+0

您提到的文章中提到的EnumPropertyModel非常接近我將要嘗試的內容。您確定無法簡化/使其與CompoundPropertyModel一起使用嗎?我對Wicket的內部工作不太熟悉,不知道這是否可能。 – Tim 2010-02-05 23:09:26