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

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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】:

我正在使用:

MyFaces orchestra 提供对话范围 &lt;redirect /&gt; 用于每个导航规则

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

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

附: "backlink"有不同的含义

【讨论】:

以上是关于JSF 中“返回”导航链接的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

JSF 最佳实践:自定义组件和 JavaScript

JSF 2.0 上用户身份验证的最佳实践?

JSF 2.0 上用户身份验证的最佳实践?

JSF:AJAX 测试最佳实践

JSF/Facelets/JSTL 条件显示最佳实践

中止操作方法的最佳实践