我想向检票口面板添加一个标签,其中标签的模型是一个枚举值。根据该枚举的值,我想显示从页面属性文件中提取的不同消息。
例如,这是一个枚举:
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 的简单性。
想法?