JSF中“返回”导航链接的最佳实践

8
什么是制作“后退”链接的最佳方式,以便导航后应用程序保持一致?
  • onclick="history.go(-1)"。这非常有害吗?
  • 在后备 bean 中使用堆栈,使您弹出上一个视图的导航案例。您可以通过使用 <f:setPropertyActionListener> 设置导航案例来实现此目的。
  • 以上都不是…其他解决方案。
任何帮助都将不胜感激!请分享您的想法! 丹尼尔
2个回答

6
如果您想通过编程导航链接来解决此问题,您可以使用LinkedList作为堆栈。这样,您可以为存储的导航案例设置边界。
示例:
public class BackNavigationBean {

    public BackNavigationBean() {
        history = new LinkedList<String>();
    }
    private LinkedList<String> history;

    public LinkedList getHistory() {
        return history;
    }

    public void setLastPage(String navigationCase) {
        history.push(navigationCase);
        if (history.size() > 10) {
            history.pollLast();
        }
    }

    public String getLastPage() {
        return history.pop();
    }
}

所以在“前向”链接中:

<h:commandLink value="Forward" action="#{myBean.someMethod}">
    <f:setPropertyActionListener target="#{backNavigationBean.lastPage}"
                                 value="back_to_index" />
</h:commandLink>

而“返回”链接将是:

<h:commandLink value="Back"
               action="#{backNavigationBean.getLastPage}" />

你好。这个Bean的作用域是什么?如果它是SessionScoped,那么由于堆栈将被链接推入,最终导致错误导航,因此管理导航将非常困难。 - LupoZ

5
我正在使用: 这样可以确保在按下“返回”按钮或 history.go(-1) 时:
  • 先前屏幕上可用的数据仍将存在(因为会话仍处于活动状态)
  • “重新提交”浏览器对话框不会打开。
P.S. "backlink" 具有不同的含义

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接