Java wicket中的导航-AjaxPagingNavigator
我用AjaxPagingNavigator解决了这个问题。问题是,当我按“转到下一页”或“转到上一页”而不是移动到下一页或上一页时,它会跳转1页。例如,如果我在第5页,按“转到下一页”而不是移动到第6页,它会跳到第7页。你能帮我解决这个问题吗。哪里出了问题?先谢谢你 代码如下:Java wicket中的导航-AjaxPagingNavigator,java,wicket,Java,Wicket,我用AjaxPagingNavigator解决了这个问题。问题是,当我按“转到下一页”或“转到上一页”而不是移动到下一页或上一页时,它会跳转1页。例如,如果我在第5页,按“转到下一页”而不是移动到第6页,它会跳到第7页。你能帮我解决这个问题吗。哪里出了问题?先谢谢你 代码如下: public class OnlineBankAjaxPagingNavigator extends AjaxPagingNavigator { PagingNavigation currentNavigatio
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"> <a class="navigatorLink" wicket:id="first" href="#"><<</a> </td>
<td width="18px" height="18px" align="center" valign="middle" wicket:id="prevCont" class="navigator_bg"> <a class="navigatorLink" wicket:id="prev" href="#"><</a> </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"> <a class="navigatorLink" wicket:id="next" href="#">></a> </td>
<td width="18px" height="18px" align="center" valign="middle" wicket:id="lastCont" class="navigator_bg"> <a class="navigatorLink" wicket:id="last" href="#">>></a> </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.
}
}