我在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
,如果我删除了WebMarkupContainer
,PagingNavigator
工作正常。虽然它们中的2个之间没有依赖关系,但如果Tickets列表为空,我使用WebMarkupContainer
来显示消息。
那么为什么WebMarkupContainer
会影响PagingNavigator
?
答案 0 :(得分:1)
您是否可以发布实施IDataProvider
的类代码,例如SortableDataProvider
?如果size()
方法没有返回正确的值,您可能会遇到您正在看到的行为。
答案 1 :(得分:0)
您的代码似乎正确。您是否使用
将任何内容设置为禁用的setEnabled(假);
这对层次结构中的组件产生影响。如果这没有什么区别,请尝试发布更多代码。