Используйте перечисление для выбора строки из файла свойств калитки

StackOverflow https://stackoverflow.com/questions/2206784

Вопрос

Я бы хотел добавить метку на панель 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 ..

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top