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的简单性。
想法?
是的,这可能是正确的方向。我找到了一个使用枚举和国际化的详细示例(http://wicketbyexample.com/enums-internationalization-with-wicket/)来解释这个特定的问题。但解决方案非常冗长,我真的在寻找更轻的重量。如果你可以详细说明你的EnumModel,它会有所帮助。 – Tauren 2010-02-05 22:34:57
您提到的文章中提到的EnumPropertyModel非常接近我将要尝试的内容。您确定无法简化/使其与CompoundPropertyModel一起使用吗?我对Wicket的内部工作不太熟悉,不知道这是否可能。 – Tim 2010-02-05 23:09:26