2

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

例如,这是一个枚举:

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 的简单性。

想法?

4

1 回答 1

4

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

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

于 2010-02-05T11:58:19.503 回答