Используйте enum для выбора строки из файла свойств калитки - PullRequest
2 голосов
/ 05 февраля 2010

Я хотел бы добавить ярлык на панель калитки, где моделью ярлыка является значение перечисления. В зависимости от значения этого перечисления я хотел бы отобразить другое сообщение, извлеченное из файла свойств страницы.

Например, вот перечисление:

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.

Идеи

1 Ответ

4 голосов
/ 05 февраля 2010

Не уверен, что это сработает, но, возможно, вы могли бы попробовать написать свой собственный класс EnumModel, который принимает значение Enum и возвращает значение ResourceModel ..

Скажите, пожалуйста, если вышесказанное недостаточно ясно, я попытаюсь уточнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...