我需要实现一个服务,就像每当在分页中单击下一个或上一个时,浏览器应该保存状态,以便在执行浏览器返回时返回最后访问的页面。目前它正在发生,就像当我在新标签页和分页中输入任何url时,如果我点击下一步按钮,进一步我点击浏览器返回按钮,它将进入新标签页。
有谁能告诉我如何做到这一点吗?
I have try following
public class ShortenLastPagePager extends SimplePager implements ValueChangeHandler<String>
{
private int pageSize;
public ShortenLastPagePager( TextLocation location, Resources resources, boolean showFastForwardButton,
int fastForwardRows, boolean showLastPageButton, int pageSize )
{
super( location, resources, showFastForwardButton, fastForwardRows, showLastPageButton );
this.pageSize = pageSize;
}
@Override
public void setPageSize( int pageSize )
{
this.pageSize = pageSize;
}
@Override
public void setPageStart( int index )
{
if ( getDisplay() != null ) {
Range range = getDisplay().getVisibleRange();
int myPageSize = 0;
index = Math.min( index, getDisplay().getRowCount() );
index = Math.max( 0, index );
myPageSize = Math.min( pageSize, getDisplay().getRowCount() - index );
if ( index != range.getStart() || myPageSize != range.getLength() ) {
getDisplay().setVisibleRange( index, myPageSize );
}
}
}
@Override
public void nextPage()
{
if ( getDisplay() != null ) {
Range range = getDisplay().getVisibleRange();
setPageStart( range.getStart() + range.getLength() );
}
}
@Override
public void previousPage()
{
if ( getDisplay() != null ) {
Range range = getDisplay().getVisibleRange();
setPageStart( range.getStart() - pageSize );
}
}
@Override
public void lastPage()
{
int remainder = getDisplay().getRowCount() % pageSize;
if ( remainder > 0 ) {
setPageStart( getDisplay().getRowCount() - remainder );
} else {
if ( getDisplay().getRowCount() / pageSize > 0 ) {
setPageStart( getDisplay().getRowCount() - pageSize );
} else {
setPageStart( 0 );
}
}
}
@Override
public void firstPage()
{
setPageStart( 0 );
}
@Override
public boolean hasPreviousPage()
{
return getDisplay() == null ? false : getDisplay().getVisibleRange().getStart() > 0 && getDisplay().getRowCount() > 0;
}
@Override
public boolean hasNextPage()
{
return getDisplay() == null ? false
: getDisplay().getRowCount() > ( getDisplay().getVisibleRange().getStart() + pageSize );
}
@Override
public void onValueChange( ValueChangeEvent<String> event )
{
event.getValue();
System.out.println( event.getSource() );
}
}
它没有击中valuechange它来到nextPage
您可以将代码放在数据提供程序中(假设您有一个),而不是尝试向分页添加值更改侦听器。
在提供内容的数据提供程序中(再次假设是一个表或列表),然后根据需要简单地更新浏览器历史记录。
之类的@Override
protected void onRangeChanged(final HasData<YourObject> display) {
// update browser URL without navigating
History.newItem(historyMapper.getToken(place), false);
...
}
然后在您的位置标记中添加支持,用于存储分页数据、起始索引、页面长度等。
在活动开始时需要相应的代码来读取分页数据并在必要时处理它。
理想情况下,如果你正在使用活动和地点,你想要避免使用浏览器后退按钮,因为通常它会导致创建一个新的地方和新的活动,这有点重。我想你们可以通过编码来解决这个问题。