我想在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的简单性。
想法?
答案 0 :(得分:4)
不确定这是否可行,但也许您可以尝试编写自己的EnumModel类,该类获取Enum的值并返回ResourceModel值。
请说明如果上述内容不够清楚,我会尽力详细说明。