2010-02-05 61 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