#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 использует идентификатор, чтобы задать выбор из выпадающего списка в качестве значения для свойства. Он также использует идентификатор, чтобы определить, какое значение выбрать из выпадающего списка при отображении страницы для объекта, для которого установлено это свойство.