Java wicket中的导航-AjaxPagingNavigator

Java wicket中的导航-AjaxPagingNavigator,java,wicket,Java,Wicket,我用AjaxPagingNavigator解决了这个问题。问题是,当我按“转到下一页”或“转到上一页”而不是移动到下一页或上一页时,它会跳转1页。例如,如果我在第5页,按“转到下一页”而不是移动到第6页,它会跳到第7页。你能帮我解决这个问题吗。哪里出了问题?先谢谢你 代码如下: public class OnlineBankAjaxPagingNavigator extends AjaxPagingNavigator { PagingNavigation currentNavigatio

我用AjaxPagingNavigator解决了这个问题。问题是,当我按“转到下一页”或“转到上一页”而不是移动到下一页或上一页时,它会跳转1页。例如,如果我在第5页,按“转到下一页”而不是移动到第6页,它会跳到第7页。你能帮我解决这个问题吗。哪里出了问题?先谢谢你

代码如下:

public class OnlineBankAjaxPagingNavigator extends AjaxPagingNavigator {
    PagingNavigation currentNavigation = null;
    Map<String, Link<?>> firstLastMap = new HashMap();
    Map<String, Link<?>> prevNextMap = new HashMap();

    public OnlineBankAjaxPagingNavigator(String id, IPageable pageable) {
        super (id, pageable);
    }

    public OnlineBankAjaxPagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
        super (id, pageable, labelProvider);
    }

    // forming navigation pages "first", "last"
    protected Link<?> newPagingNavigationLink(String id, IPageable pageable, int pageNumber)
    {
        Link<?> ret = null;
        if (firstLastMap.containsKey(id))
            ret = firstLastMap.get(id);
        else {
            AjaxPagingNavigationLink navCont = new AjaxPagingNavigationLink(id + "Cont", pageable, pageNumber);

            // add css for enable/disable link
            long pageIndex = pageable.getCurrentPage() + pageNumber;
            navCont.add(new AttributeModifier("class", new OnlineBankAjaxPageLinkCssModel(pageable,pageIndex, "navigator_bg")));

            navCont.add(new AjaxPagingNavigationLink(id, pageable, pageNumber));
            ret = navCont;
            firstLastMap.put(id,ret);
        }
        return ret;
    }

    // forming navigation pages "prev", "next"
    protected Link<?> newPagingNavigationIncrementLink(String id, IPageable pageable, int increment)
    {
        Link<?> ret = null;
        if (prevNextMap.containsKey(id))
            ret = prevNextMap.get(id);
        else {
            AjaxPagingNavigationIncrementLink navCont = new AjaxPagingNavigationIncrementLink(id+ "Cont", pageable, increment);

            // add css for enable/disable link
            long pageIndex = pageable.getCurrentPage() + increment;
            navCont.add(new AttributeModifier("class",
               new OnlineBankAjaxPageLinkIncrementCssModel(pageable, pageIndex)));

            // change original wicket-link, so that it always generates href
            navCont.add(new AjaxPagingNavigationIncrementLink(id, pageable, increment));
            prevNextMap.put(id, navCont);
            ret = navCont;
        }
        return ret;
    }

    // forming navigation pages - 1,2,3 ...
    protected PagingNavigation newNavigation(IPageable pageable, IPagingLabelProvider labelProvider) {
        PagingNavigation tmp;
        String id;

        if (currentNavigation==null) {
            tmp = super.newNavigation(pageable, labelProvider);
            id = tmp.getId();
            tmp = null;

            currentNavigation =  new AjaxPagingNavigation (id, pageable, labelProvider) {
                @Override
                protected LoopItem newItem(int iteration) {
                    LoopItem item = super.newItem(iteration);

                    // add css for enable/disable link
                    long pageIndex = getStartIndex() + iteration;
                    item.add(new AttributeModifier("class",
                        new OnlineBankAjaxPageLinkCssModel(pageable,
                                pageIndex, "navigator_active")));
                    return item;
                }
            };
        }

        return currentNavigation;
    }
};
public class OnlineBankAjaxPagingNavigator扩展了AjaxPagingNavigator{
PagingNavigation currentNavigation=null;
Map>prevenxtmap=newhashmap();
公共联机BankajaxPagingNavigator(字符串id,IPageable可分页){
超级(id,可分页);
}
公共联机BankajaxPagingNavigator(字符串id、IPageable pageable、iPageLabelProvider labelProvider){
超级(id、可分页、labelProvider);
}
//形成“第一”、“最后”导航页面
受保护链接newPagingNavigationLink(字符串id、IPageable pageable、int pageNumber)
{
链接ret=null;
if(firstLastMap.containsKey(id))
ret=firstLastMap.get(id);
否则{
AjaxPagingNavigationLink navCont=新的AjaxPagingNavigationLink(id+“Cont”,可分页,页码);
//为启用/禁用链接添加css
long pageIndex=pageable.getCurrentPage()+页码;
导航控制添加(新的属性修改器(“类”,新的OnlineBankAjaxPageLinkCssModel(可分页,页面索引,“导航器”);
导航控制添加(新的AjaxPagingNavigationLink(id,可分页,页码));
ret=导航控制;
firstLastMap.put(id,ret);
}
返回ret;
}
//形成导航页面“上一页”、“下一页”
受保护链接newPagingNavigationIncrementLink(字符串id、IPageable pageable、int增量)
{
链接ret=null;
if(上一个映射containsKey(id))
ret=prevenxtmap.get(id);
否则{
ajaxpagingnavigationcrementlink navCont=新的ajaxpagingnavigationcrementlink(id+“Cont”,可分页,增量);
//为启用/禁用链接添加css
long pageIndex=pageable.getCurrentPage()+增量;
navCont.add(新属性修改器(“类”),
新的OnlineBankAjaxPageLinkIncrementCssModel(可分页,页面索引));
//更改原始wicket链接,使其始终生成href
导航控制添加(新的AjaxPagingNavigationCrementLink(id,可分页,增量));
prevNextMap.put(id,导航控制);
ret=导航控制;
}
返回ret;
}
//正在形成导航页面-1,2,3。。。
受保护的分页导航新建导航(IPageable pageable,iPageLabelProvider labelProvider){
分页导航tmp;
字符串id;
如果(currentNavigation==null){
tmp=super.newNavigation(可分页,labelProvider);
id=tmp.getId();
tmp=null;
currentNavigation=新AjaxPagingNavigation(id、可分页、labelProvider){
@凌驾
受保护的LoopItem newItem(整数迭代){
LoopItem=super.newItem(迭代);
//为启用/禁用链接添加css
long pageIndex=getStartIndex()+迭代;
添加(新属性修改器(“类”,
新的OnlineBankAjaxPageLinkCssModel(可分页,
页面索引,“导航器处于活动状态”);
退货项目;
}
};
}
返回导航;
}
};
html如下所示:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:wicket="http://wicket.apache.org">
<head>
    <title></title>
</head>
<body>
<wicket:panel>
    <style>

        .navigator_bg {
            font-family: Verdana, Tahoma Arial;
            font-style: normal;
            color: #FFFFFF;
            border: 1px solid black;
            background-color: #00395D;
        }

        .navigatorBgDigit{
            font-family: Verdana, Tahoma Arial;
            color: #FFFFFF;
            border: 1px solid black;
            background-color: #00395D;
        }

        .navigator_active{
            font-family: Verdana, Tahoma Arial;
            font-style: normal;
            background-color: #236B98;
            color: #AFEEEE;
        }

        a.navigatorLink:link {
            font-family: Verdana, Tahoma, Arial;
            color: #FFFFFF;
            text-decoration: none;
            background-color: #00395D;
        }

        a.navigatorLink:visited {
            font-family: Verdana, Tahoma, Arial;
            color: #ffffff;
            text-decoration: none;
            background-color: #00395D;
        }

        a.navigatorLink:hover {
            font-family: Verdana, Tahoma, Arial;
            color: #FFFFFF;
            text-decoration: none;
            background-color: #00395D;
        }

        a.navigatorLink:active {
            font-family: Verdana, Tahoma, Arial;
            color: red;
            text-decoration: none;
            background-color: #00395D;
        }

    </style>
    <table border='0'>
    <tr class="navigator_bg">
        <td width="18px" height="18px" align="center" valign="middle" wicket:id="firstCont" class="navigator_bg">&nbsp;<a class="navigatorLink" wicket:id="first" href="#">&lt;&lt;</a>&nbsp;</td>
        <td width="18px" height="18px" align="center" valign="middle" wicket:id="prevCont" class="navigator_bg">&nbsp;<a class="navigatorLink" wicket:id="prev" href="#">&lt;</a>&nbsp;</td>
        <td width="18px" height="18px" align="center" valign="middle" wicket:id="navigation" class="navigatorBgDigit"><a wicket:id="pageLink" href="#" class="navigatorLink"><span wicket:id="pageNumber">1</span></a></td>
        <td width="18px" height="18px" align="center" valign="middle" wicket:id="nextCont" class="navigator_bg">&nbsp;<a class="navigatorLink" wicket:id="next" href="#">&gt;</a>&nbsp;</td>
        <td width="18px" height="18px" align="center" valign="middle" wicket:id="lastCont" class="navigator_bg">&nbsp;<a class="navigatorLink" wicket:id="last" href="#">&gt;&gt;</a>&nbsp;</td>
    </tr>
    </table>
</wicket:panel>
</body>
</html>

.navigator_bg{
字体系列:Verdana,Tahoma Arial;
字体风格:普通;
颜色:#FFFFFF;
边框:1px纯黑;
背景色:#00395D;
}
.navigatorBgDigit{
字体系列:Verdana,Tahoma Arial;
颜色:#FFFFFF;
边框:1px纯黑;
背景色:#00395D;
}
.navigator\u激活{
字体系列:Verdana,Tahoma Arial;
字体风格:普通;
背景色:#236B98;
颜色:#afeee;
}
a、 导航链接:链接{
字体系列:Verdana、Tahoma、Arial;
颜色:#FFFFFF;
文字装饰:无;
背景色:#00395D;
}
a、 导航链接:已访问{
字体系列:Verdana、Tahoma、Arial;
颜色:#ffffff;
文字装饰:无;
背景色:#00395D;
}
a、 导航链接:悬停{
字体系列:Verdana、Tahoma、Arial;
颜色:#FFFFFF;
文字装饰:无;
背景色:#00395D;
}
a、 导航链接:活动{
字体系列:Verdana、Tahoma、Arial;
颜色:红色;
文字装饰:无;
背景色:#00395D;
}
以下答案不适用于此问题。有关正确答案,请参阅更新部分

我在迁移到Wicket 7时遇到了这个问题。被迁移的代码没有任何更改,但工作不正常。不仅存在上述问题。如果我点击了任何导航页面链接,就会出现“拒绝访问”页面。经过一些研究,我意识到,当点击某个链接时,会发送两个相同的事件,因此您会将页面增加两次,或者转到页面,然后链接被点击,该链接会消失,第二个请求试图访问该消失的链接,因此出现“拒绝访问”页面

我真的不知道这是一个bug,还是我做错了什么,但我还没有找到任何关于这个问题的信息。因此,我为分页链接提供了一种解决方法

如果你看/** * Overridden to workaround wicket 7 behavior, which proccessed an error, when ajax navigation is used. */ @Override protected void onComponentTag ( final ComponentTag tag ) { super.onComponentTag ( tag ); if ( !Strings.isEmpty ( tag.getAttribute ( "href" ) ) ) // checking if href is not null or empty with org.apache.wicket.util.string.Strings class. { tag.put ( "href", "" ); //removing any contents of the href option. } }