Properties 使用枚举从wicket属性文件中选择字符串

Properties 使用枚举从wicket属性文件中选择字符串,properties,enums,internationalization,wicket,Properties,Enums,Internationalization,Wicket,我想向wicket面板添加一个标签,其中标签的模型是枚举值。根据该枚举的值,我想显示从页面属性文件中提取的不同消息 例如,这里有一个枚举: public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED }; 我可以轻松地将标签添加到将此枚举作为其模型的面板: add(new Label("approval", new Model(ApprovalType.APPROVED))); 但是,这只会输出未批准、已批准或已阻止。我想输出一条基于此枚

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

例如,这里有一个枚举:

public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };
我可以轻松地将标签添加到将此枚举作为其模型的面板:

add(new Label("approval", new Model(ApprovalType.APPROVED)));
但是,这只会输出未批准、已批准或已阻止。我想输出一条基于此枚举值选择的本地化消息

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

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")
)));
添加(新标签(“批准”),新模型(
"${}", 
新的PropertyModel(getDefaultModel(),“批准”)
)));
但这似乎过于冗长,仍然没有利用使用CompoundPropertyModel的简单性


想法?

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


如果上面的内容不够清楚,请这样说,我将尝试详细说明。

是的,这可能是正确的方向。我发现了一个使用枚举和国际化的详细示例(),该示例讨论了这个特定问题。但是解决方案太冗长了,我真的在寻找更轻的东西。如果您能详细介绍一下您的EnumModel,它会有所帮助。您所指的文章中提到的EnumPropertyModel与我所尝试的非常接近。。您确定不能简化/使其与CompoundPropertyModel一起使用吗?我对Wicket的内部工作原理不太熟悉,不知道这是否可能。。