GWT SimplePager - 为每个下一个和上一个添加历史记录

时间:2014-07-21 06:45:52

标签: java javascript jquery gwt

我需要实现一项服务,例如每当在分页中点击下一个或上一个时,浏览器应保存状态,以便在浏览器返回时返回到上次访问的页面。 目前正在发生的情况就像我在新标签页中输入任何网址一样,如果我点击下一个按钮,我会点击浏览器后退按钮,它将进入新的标签页。

任何人都可以建议如何实现这一点。

我试过以下

    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() );
}

}

它没有击中onValueChange它将来到nextPage

1 个答案:

答案 0 :(得分:1)

您可以将代码添加到数据提供程序中(假设您有一个代码),而不是尝试将值更改侦听器添加到分页器中。

在提供内容的数据提供者中(我再次假设一个表或列表),然后根据需要更新浏览器历史记录。

这样的东西
@Override
protected void onRangeChanged(final HasData<YourObject> display) {

  // update browser URL without navigating
  History.newItem(historyMapper.getToken(place), false);

  ...
}

然后在你的地方标记中添加支持,用于存储分页数据,起始索引,页面长度等等。

您需要在活动开始时使用相应的代码来读取分页数据并根据需要进行处理。

理想情况下,如果您使用的活动和地点要避免使用浏览器后退按钮,通常会导致创建新地点和新活动,这有点沉重。我想你可以围绕这个编码。