Использование IChoiceRenderer

#java #wicket #renderer

#java #калитка #средство визуализации

Вопрос:

В wicket IChoiceRenderer для выпадающего списка используется как :

 IChoiceRenderer renderer = new IChoicerRenderer() {
    public Object getDisplayValue(Object object) {
        return ((Country) object).getName();
    }

    public String getIdValue(Object object, int index) {    
        return ((Country) object).getId()   "";
    }
};

countries.setChoiceRenderer(renderer);
  

В спецификации класса IChoiceRenderer указано, что:

Предоставляет один выбор. Отделяет значения ‘id’, используемые для внутреннего представления, от ‘display values’, которые являются значениями, показанными пользователю компонентов, использующих этот рендерер.

Описание getDisplayValue() является:

Получаем значение для отображения конечному пользователю.

Это означает, что это помогает отображать название страны. Верно?

И описание getIdValue() является:

Этот метод вызывается для получения значения id объекта (используемого в качестве атрибута value элемента choice) Идентификатор может быть извлечен из объекта как первичный ключ, или, если список стабилен, вы могли бы просто вернуть toString индекса.

Что это значит?

В общем случае свойство id моделей различных компонентов wicket, таких как DropDownChoice здесь, имеет тип Long . Помогает ли getIdValue() сортировать это?

Или помогает генерировать тег id для HTML?

Какова концепция вышеупомянутого «Первичного ключа«?

Спасибо и с уважением.

Ответ №1:

Представьте, что объекты будут помещены на карту, где идентификатор является ключом, а значение — объектом, на который вы хотите, чтобы он ссылался. Если два ваших объекта используют один и тот же идентификатор или если идентификатор объекта изменяется, ваша карта не будет работать должным образом.

Это то, что они имеют в виду, говоря, что это должен быть первичный ключ.

Кстати, вам не обязательно внедрять IChoiceRenderer с нуля в простых ситуациях, в вашем случае вы можете использовать new ChoiceRenderer( "name", "id" );

Ответ №2:

В выпадающем списке у вас будут элементы, представляющие собой пары ключ-значение. Итак, на примере ваших стран рассмотрим следующее сопоставление кода страны с кодом страны:

 Key             Value
---------------------
Afghanistan     AF
Aland Islands   AX
Albania         AL
Algeria         DZ
American Samoa  AS
Andorra         AD
Angola          AO 
  

Если пользователь выбирает Алжир, то ключ DZ используется для однозначной идентификации его выбора. Итак, если основным объектом является Person со countryOfCitizenship свойством, этому свойству будет присвоено значение Country с идентификатором DZ . Wicket использует идентификатор, чтобы задать выбор из выпадающего списка в качестве значения для свойства. Он также использует идентификатор, чтобы определить, какое значение выбрать из выпадающего списка при отображении страницы для объекта, для которого установлено это свойство.