如何在 Primefaces+JSF2 中显示用户点击的 url

Posted

技术标签:

【中文标题】如何在 Primefaces+JSF2 中显示用户点击的 url【英文标题】:How Can i show urls clicked by user in Primefaces+JSF2 【发布时间】:2012-09-27 12:36:14 【问题描述】:

我正在使用带有 Prime 面孔的 JSF2。我想显示用户在每个页面中点击的所有以前的链接或 URL。我该怎么做?

【问题讨论】:

你正在寻找一个面包屑:primefaces.org:8080/showcase/ui/breadCrumb.jsf你必须自己把逻辑放在里面。 您好,感谢您的回复,但我不是在寻找 BreadCrumb..我必须显示用户访问的所有 Urls。假设您访问了三个 Urls Like(A.xhtml,B.Xhtml, C.xhtml),现在你在 D.xhtml 页面中,然后我必须向用户显示前三个 URL。 我可能会在用户每次进入新页面时使用过滤器来抓取 URL。这似乎是“最简单”的方法。您可以查看过滤器文档。这很简单。 【参考方案1】:

这里有一个很好的链接:How can I get the request URL from a Java Filter?

我要做的是使用类似该示例的内容并执行一组三个 URL。

//Using linked example
    public class MyFilter implements Filter 
        public void init(FilterConfig config) throws ServletException  

        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException 
            chain.doFilter(request, response);

            String url = ((HttpServletRequest) request).getPathTranslated();
            UrlBean urlBean = (UrlBean) FacesContext.getCurrentInstance()getApplication().getValueBinding("#urlBean");
            urlBean.storeUrl(url);
        

    public void destroy()  

这完全未经测试,但这个想法应该可行。您只需要为您的组件实现一些逻辑(可能是堆栈),以便它存储您需要的内容。 (很明显,您可能会多次访问同一个 URL)。我应该注意 UrlBean 只是一个抽象概念,您必须实现它

【讨论】:

感谢 Daniel Chapman,这个例子看起来不错,我会尝试并告诉你结果。 我没有采用上述方法,而是使用 HashMap 创建了一个 Singleton 类,并添加了所有带有 sessionId 作为 Map 键的 Url 它对我来说很好。【参考方案2】:

您好,我创建了这个 Singleton 类来放置用户浏览的 Url。

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class UrlHistory 

    @SuppressWarnings("rawtypes")
    private static Map<String, List> store = new HashMap<String, List>();

    private static UrlHistoryBean instance = null;


    public static UrlHistoryBean getInstance() 
        if (instance == null) 
            instance = new UrlHistoryBean();
        
        return instance;
    

    LinkedList<UrlData> urlList = new LinkedList<UrlHistoryBean.UrlData>();

    public void addUrl(String sessionId, String urlString, int urlId) 
        UrlData data = new UrlData();
        data.setUrlName(urlString);
        data.setUrlId(companyId);
        if (urlList.isEmpty()) 
            urlList.add(data);
         else 
            boolean isEqual = false;
            for (UrlData urlDataObj : urlList) 
                if (urlDataObj.equals(data))
                    isEqual = true;
            
            if(!isEqual)

                urlList.addFirst(data);
        
        store.put(sessionId, urlList);

    

    @SuppressWarnings("rawtypes")
    public static Map<String, List> getStore() 
        return store;
    

    @SuppressWarnings("rawtypes")
    public static void setStore(Map<String, List> store) 
        UrlHistoryBean.store = store;
    

    public class UrlData 

        String urlName;
        int urlId;

        public String getUrlName() 
            return UrlName;
        

        public void setUrlName(String UrlName) 
            this.UrlName = UrlName;
        

        public int getUrlId() 
            return urlId;
        

        public void setUrlId(int urlId) 
            this.urlId = urlId;
        

        public boolean equals(UrlData rData) 
            boolean bEqual = false;
            if (this.getUrlId() > 0 && rData.getUrlId() > 0 && this.getUrlId() == rData.getUrlId()) 
                bEqual = true;
            
            return bEqual;
        

    


【讨论】:

以上是关于如何在 Primefaces+JSF2 中显示用户点击的 url的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.0 更新 primefaces 对话框第一次不起作用

jsf2 primefaces 通知栏

刷新会话jsf2,PrimeFaces中的数据

使用 JSF2.0 和 Primefaces 3.4 进行导航

JSF 页面元素无法从具有动作属性的支持 bean 触发方法。(JSF2.0 + primefaces)

我如何改变primefaces中标签的方向?