Может ли Wicket иметь раскрывающиеся меню AJAXified? - PullRequest
2 голосов
/ 08 октября 2010

Мне нужно создать веб-страницу с Wicket, которая выкладывает следующую таблицу:

+------------+---------+
|  Category  |  Value  |
+------------+---------+
|    CatA    |  ValA   |
+------------+---------+
|    CatB    |  ValB   |
+------------+---------+
|    CatC    |  ValC   |
+------------+---------+
|    CatD    |  ValD   |
+------------+---------+
|    CatE    |  ValE   |
+------------+---------+

Каждый элемент в этой таблице, кроме заголовков, должен быть выпадающим меню. Есть две проблемы. Во-первых, каждый список значений зависит от списка категорий. Для простоты примера, CatA может содержать «спорт», «автомобили» и «животные» в качестве опций. Затем, если выбран «спорт», ValA заполняется «бейсболом», «футболом» и «баскетболом». Но если выбрать «автомобили», ValA вместо этого будет заполнен «Volvo», «Saab» и «Mercedes».

Другая проблема заключается в том, что строки не должны появляться, если строки над ними не заполнены. Поэтому при загрузке страницы должны быть видны только CatA и ValA. После заполнения ValA, CatB и ValB становятся видимыми. Если ValB заполнен, то появляются CatC и ValC, & c.

У меня вопрос: можно ли это сделать в чистом калитке, предпочтительно асинхронно? Я просмотрел API Wicket, но я не слишком знаком с ним, поэтому я мог легко пропустить класс, который делает то, что я хочу. Моя первая мысль была связана с использованием DropDownChoice и его onSelectionChanged() метода, но это не похоже на AJAXified.

Если нет абсолютно никакого способа, которым это происходит только с Wicket, я бы подумал об использовании JavaScript, но это действительно последнее средство.

Мне не обязательно нужен какой-либо код - он может даже не работать, поскольку это действительно урезано от моих реальных требований к проекту - но я был бы признателен за указание на полезный класс API или существующую реализацию или тому подобное.

Edit:
Хорошо, ответ donroby отлично работал для первой части (делая значения зависящими от категорий), но я все еще теряюсь во второй части (скрывая строки, пока все предыдущие строки не будут заполнены). Сначала я думал, что это можно сделать, прикрепив LoadableDetachableModel s, но теперь я понимаю, что это не то, что делают те. Есть ли способ указать, находится ли компонент на странице вообще?

Ответы [ 3 ]

0 голосов
/ 11 октября 2010

Работает с калиткой и Ajax. При создании ячейки таблицы вы должны создать панель калитки, которая содержит этот DropDownChoice. Если вам нужно обновить значения, вы должны обновить значения модели выпадающего выбора и выполнить target.addComponent (DropDownChoice), где target - это AjaxRequestTarget. Кроме того, в раскрывающемся списке должно быть установлено значение setOutputMarkupId, равное true, чтобы его можно было обновлять. Я думаю, что могу помочь вам с кодом, если он вам нужен.

0 голосов
/ 27 октября 2010

Похоже, что ответ во второй части связан с вызовом метода setVisible(), унаследованного от Component в нужное время. Все же собираюсь дать донробу принятый ответ, хотя.

0 голосов
/ 09 октября 2010

Некоторые примеры кода в Примеры Wicket Ajax могут быть полезны, в частности, пример Drop Down Choice .

Вы, безусловно, можете делать такие вещи вПрогуляйтесь, добавив поведение Ajax и минимизируйте количество JavaScript, которое вы должны написать самостоятельно, чтобы достичь этого.

...