Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT SimplePage-为每个下一个和上一个添加历史记录_Java_Javascript_Jquery_Gwt - Fatal编程技术网

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

Java GWT SimplePage-为每个下一个和上一个添加历史记录,java,javascript,jquery,gwt,Java,Javascript,Jquery,Gwt,我需要实现一个服务,比如每当在分页中单击下一个或上一个页面时,浏览器应保存状态,以便在执行浏览器返回时返回到上次访问的页面。 当前的情况是,当我在新选项卡页面中输入任何url时,如果我单击“下一步”按钮,在分页中,再单击“浏览器后退”按钮,它将进入新选项卡页面 任何人请建议如何实现这一点 我试过跟随 public class ShortenLastPagePager extends SimplePager implements ValueChangeHandler<String&g

我需要实现一个服务,比如每当在分页中单击下一个或上一个页面时,浏览器应保存状态,以便在执行浏览器返回时返回到上次访问的页面。 当前的情况是,当我在新选项卡页面中输入任何url时,如果我单击“下一步”按钮,在分页中,再单击“浏览器后退”按钮,它将进入新选项卡页面

任何人请建议如何实现这一点

我试过跟随

    public class ShortenLastPagePager extends SimplePager implements ValueChangeHandler<String>
公共类ShortEnlastPager扩展SimplePager实现ValueChangeHandler
{

private int pageSize;
public ShortenLastPagePager(文本位置、资源、布尔值ShowFastForward按钮、,
int fastForwardRows、布尔showLastPageButton、int pageSize)
{
超级(位置、资源、showFastForwardButton、fastForwardRows、showLastPageButton);
this.pageSize=页面大小;
}
@凌驾
公共void setPageSize(int pageSize)
{
this.pageSize=页面大小;
}
@凌驾
公共void setPageStart(整型索引)
{
如果(getDisplay()!=null){
范围范围=getDisplay().getVisibleRange();
int myPageSize=0;
index=Math.min(index,getDisplay().getRowCount());
索引=数学最大值(0,索引);
myPageSize=Math.min(pageSize,getDisplay().getRowCount()-index);
if(index!=range.getStart()| | myPageSize!=range.getLength()){
getDisplay().setVisibleRange(索引,myPageSize);
}
}
}
@凌驾
公共无效下一页()
{
如果(getDisplay()!=null){
范围范围=getDisplay().getVisibleRange();
setPageStart(range.getStart()+range.getLength());
}
}
@凌驾
公共作废上一页()
{
如果(getDisplay()!=null){
范围范围=getDisplay().getVisibleRange();
setPageStart(范围.getStart()-pageSize);
}
}
@凌驾
公开作废最后一页()
{
整数余数=getDisplay().getRowCount()%pageSize;
如果(余数>0){
setPageStart(getDisplay().getRowCount()-余数);
}否则{
如果(getDisplay().getRowCount()/pageSize>0){
setPageStart(getDisplay().getRowCount()-pageSize);
}否则{
setPageStart(0);
}
}
}
@凌驾
公开作废首页()
{
setPageStart(0);
}
@凌驾
公共布尔值hasPreviousPage()
{
返回getDisplay()==null?false:getDisplay().getVisibleRange().getStart()>0&&getDisplay().getRowCount()>0;
}
@凌驾
公共布尔值hasNextPage()
{
return getDisplay()==null?false
:getDisplay().getRowCount()>(getDisplay().getVisibleRange().getStart()+pageSize);
}
@凌驾
ValueChange上的公共作废(ValueChangeEvent事件)
{
event.getValue();
System.out.println(event.getSource());
}
}


它没有点击ValueChange,而是进入下一页,而不是尝试向寻呼机添加一个值更改侦听器,您可以将代码放入数据提供程序(假设您有一个)

在提供内容的数据提供程序中(同样,我假设是一个表或列表),然后根据需要简单地更新浏览器历史记录

差不多

@Override
protected void onRangeChanged(final HasData<YourObject> display) {

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

  ...
}
@覆盖
受保护的无效onRangeChanged(最终数据显示){
//在不导航的情况下更新浏览器URL
History.newItem(historyMapper.getToken(place),false);
...
}
然后在place令牌中添加对存储分页数据、开始索引、页面长度等的支持

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


理想情况下,如果您正在使用活动和场所,您希望避免使用“浏览器后退”按钮,因为这通常会导致创建一个新场所和新活动,这有点繁重。我想你可以用自己的方式来解决这个问题

在说明中添加了如何管理应用程序历史记录?您是否将活动和场所用于历史管理?或者别的什么?应用程序历史正在通过PlaceHistoryMapper映射位置进行管理,并且正在绑定。主要的问题是使用分页创建历史记录,因为它没有值转换器,而是在下一页、上一页、最后一页等上工作……我已经应用了此更改,它工作正常,但这使我的应用程序很繁重。如果您建议在寻呼机级别进行处理,这将是一件好事,因为我在应用程序中也有一个自定义的整数框,用于输入所需的表格页面。问题是后退/前进按钮将始终与位置和活动交互。我猜你有某种
com.google.gwt.activity.shared.ActivityMapper
可以将地点映射到活动。我所能想到的就是以某种方式缓存活动,这样位置更改不会重新创建活动,而是重用和重新配置现有活动。是的,我正在使用ActivityMapper。我也在寻找同样的。这里的问题是SimplePage通过设置startpage的索引自动使用rangechangehandler显示数据。它不调用位置和活动,但在我的例子中,是调用位置和活动导致应用程序更重。如果用户单击寻呼机按钮,则这应该是正常的-没有位置更改。单击其中一个应该触发范围更改,使用上面的代码将更新URL,但不会触发位置更改。只有单击浏览器按钮才会导致位置更改。在这种情况下,您必须处理位置更改-可能是在活动映射器中,也可能是通过缓存和重用活动,使其不那么“沉重”。是的,我也在这样做。后来我想到了这一点。希望它能起作用。很多。
@Override
protected void onRangeChanged(final HasData<YourObject> display) {

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

  ...
}