Используйте перечисление для выбора строки из файла свойств калитки
-
18-09-2019 - |
Вопрос
Я бы хотел добавить метку на панель wicket, где моделью метки является значение enum.Основываясь на значении этого перечисления, я хотел бы отобразить другое сообщение, извлеченное из файла свойств страницы.
Например, вот перечисление:
public enum ApprovalType { UNAPPROVED, APPROVED, BLOCKED };
Я могу легко добавить метку на панель, модель которой содержит это перечисление:
add(new Label("approval", new Model(ApprovalType.APPROVED)));
Однако это просто приведет к выводу "НЕУТВЕРЖДЕННЫЙ", "ОДОБРЕННЫЙ" или "ЗАБЛОКИРОВАННЫЙ".Я бы хотел вывести локализованное сообщение, которое выбирается на основе значения этого перечисления.
Итак, если у меня есть этот файл свойств, каков наилучший способ вывода этих сообщений?
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 .
Идеи?
Решение
Не уверен, сработает ли это, но, возможно, вы могли бы попробовать написать свой собственный класс EnumModel, который принимает значение Enum и возвращает значение ResourceModel ..
Пожалуйста, скажите так, если вышесказанное недостаточно ясно, я постараюсь уточнить.