Использование IChoiceRenderer - PullRequest
4 голосов
/ 09 мая 2011

В калитке IChoiceRenderer для DropDownChoice используется следующим образом:

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

Описание getDisplayValue ():

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

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

И описание getIdValue ():

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

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

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

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

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

Спасибо и всего наилучшего.

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

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

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

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

1 голос
/ 09 мая 2011

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

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

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

...