【问题标题】:Best practices for "Back" navigation links in JSFJSF 中“返回”导航链接的最佳实践
【发布时间】:2011-01-13 11:57:48
【问题描述】:

制作“返回”链接的最佳方式是什么,以便应用程序在导航后保持一致。

  • onclick="history.go(-1)"。这非常有害吗?
  • 使用支持 bean 中的堆栈弹出最后一个视图的导航案例。您可以通过使用<f:setPropertyActionListener> 设置导航案例来做到这一点。
  • 这些都不是……其他解决方案。

任何帮助将不胜感激!分享你的意见! 丹尼尔

【问题讨论】:

    标签: java jsf navigation


    【解决方案1】:

    如果您想通过编程导航链接解决此问题,您可以使用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 ,那么管理导航将非常困难,因为堆栈将被推送,链接最终会出现错误导航。
    【解决方案2】:

    我正在使用:

    这确保在按下“返回”按钮或history.go(-1):

    • 上一个屏幕中可用的数据将仍然存在(因为对话仍处于活动状态)
    • “重新提交”浏览器对话框不会打开。

    附: "backlink"有不同的含义

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2014-11-16
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多