Почему PagingNavigator не генерирует URL-адреса? - PullRequest
1 голос
/ 15 декабря 2010

У меня проблема с PagingNavigator в Wicket, и я не понимаю, почему у меня это происходит. Вот то, что я хотел использовать PagingNavigator с Dataview

dataView = new DataView("pageableTicketsList", provider){
    protected void populateItem(final Item item) {
       //Somes codes here
    };
navigator = new PagingNavigator("navigator", dataView);
dataView.setItemsPerPage(30);
addOrReplace(dataView);
addOrReplace(navigator);

В html-файле у меня просто есть:

<wicket:enclosure child="navigator">     
 <div class="navigator">
         <span wicket:id="navigator" ></span>
    </div>     
</wicket:enclosure>

Когда я тестирую в веб-браузере, фактически, у меня номер страницы отображается как:

<< <1 2 3 4 5 6 7 8 9 10> >>

НО любой из них кликабелен.

Я видел в FireBug, что URL не генерируются должным образом, как это:

<a href="?wicket:interface=:13:mypage:navigator:navigation:0:pageLink:4:ILinkListener::"><span>1</span>
</a>

Вместо этого у меня просто

<span>1</span>

Я не понимаю, что я делаю не так?

Вот код моего провайдера

public class MyProvider implements IDataProvider {

    private List<Ticket> ticketsList;

    public MyProvider(TicketService ticketService // and some paramaters){
            ticketsList = ticketService.getListBy(//the parameters);
    }

    public Iterator iterator(int first, int count) {
    return ticketsList.subList(first, first + count).iterator();
    }

    public IModel model(final Object object) {
            return new LoadableDetachableModel() {
            @Override
                protected Object load() {
               return (Ticket)object;
            }};
    }

    public int size() {
    return ticketsList.size();
    }

    public void detach() {

    }

    public List<Ticket> getTicketsList() {
    return ticketsList;
    }

    public void setTicketsList(List<ListTicketsExtranetView> ticketsList) {
    this.ticketsList = ticketsList;
    }
}

Метод size() возвращает правильное значение, а navigator.isEnabled() возвращает истину

Ну, после целого дня копания я наконец узнал, откуда возникла моя проблема: У меня есть WebMarkupContainer, который был добавлен на мою страницу, если я удаляю это WebMarkupContainer, PagingNavigator работает нормально. Между ними нет никаких зависимостей, хотя я использую WebMarkupContainer, чтобы показать сообщение, если список Билетов пуст или нет. Так ПОЧЕМУ WebMarkupContainer оказывает влияние на PagingNavigator?

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Можете ли вы опубликовать код вашего класса, который реализует IDataProvider, например SortableDataProvider? Если метод size() не возвращает правильное значение, вы можете столкнуться с поведением, которое вы видите.

0 голосов
/ 16 декабря 2010

Ваш код кажется правильным. Вы установили что-либо отключенным с помощью

setEnabled (ложь);

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

...