为什么PagingNavigator没有生成网址?

时间:2010-12-15 17:55:19

标签: wicket

我在Wicket中遇到了PagingNavigator的问题,我不明白我为什么要这样做。这就是问题,我想使用带有Dataview的PagingNavigator

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>

当我在webBrowser中测试时,事实上,我的页码显示为:

&LT;&LT; &LT; 1 2 3 4 5 6 7 8 9 10> &GT;&GT;

但它们中的任何一个都是可点击的。

我在FireBug中看到网址没有像这样正确生成:

<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()返回true

好吧,经过一整天的挖掘,我终于找到了问题所在: 我的页面已添加WebMarkupContainer,如果我删除了WebMarkupContainerPagingNavigator工作正常。虽然它们中的2个之间没有依赖关系,但如果Tickets列表为空,我使用WebMarkupContainer来显示消息。 那么为什么WebMarkupContainer会影响PagingNavigator

2 个答案:

答案 0 :(得分:1)

您是否可以发布实施IDataProvider的类代码,例如SortableDataProvider?如果size()方法没有返回正确的值,您可能会遇到您正在看到的行为。

答案 1 :(得分:0)

您的代码似乎正确。您是否使用

将任何内容设置为禁用
  

的setEnabled(假);

这对层次结构中的组件产生影响。如果这没有什么区别,请尝试发布更多代码。