使用enum从wicket属性文件中选择字符串

时间:2010-02-05 11:23:16

标签: properties enums internationalization wicket

我想在wicket面板中添加标签,其中标签的模型是枚举值。根据该枚举的值,我想显示从页面属性文件中提取的不同消息。

例如,这是一个枚举:

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };

我可以轻松地向具有此枚举的面板添加标签作为其模型:

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

但是,这只会输出UNAPPROVED,APPROVED或BLOCKED。我想输出一个基于此枚举值选择的本地化消息。

因此,如果我有这个属性文件,那么将这些消息输出的最佳方法是什么?

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

Wicket附带的组件是否有这样做?或者我需要自己编写吗?

最后,我发现这也有效:

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

但这似乎过于冗长,仍然没有利用使用CompoundPropertyModel的简单性。

想法?

1 个答案:

答案 0 :(得分:4)

不确定这是否可行,但也许您可以尝试编写自己的EnumModel类,该类获取Enum的值并返回ResourceModel值。

请说明如果上述内容不够清楚,我会尽力详细说明。