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的簡單性。
想法?
是的,這可能是正確的方向。我找到了一個使用枚舉和國際化的詳細示例(http://wicketbyexample.com/enums-internationalization-with-wicket/)來解釋這個特定的問題。但解決方案非常冗長,我真的在尋找更輕的重量。如果你可以詳細說明你的EnumModel,它會有所幫助。 – Tauren 2010-02-05 22:34:57
您提到的文章中提到的EnumPropertyModel非常接近我將要嘗試的內容。您確定無法簡化/使其與CompoundPropertyModel一起使用嗎?我對Wicket的內部工作不太熟悉,不知道這是否可能。 – Tim 2010-02-05 23:09:26