2013-12-19 43 views
0

我正在使用jsf2和RichFaces。我想跟踪用户正在浏览的每个页面。显示不正确的URL的Jsf模板

为此,我创建了截取请求页面的Servelet过滤器。在我的项目中,我使用jsf模板功能,其中页眉和页脚已修复。在body部分,我定义了menu.xhtml和一个iframe标签。无论何时用户点击菜单上的任何链接,响应都会针对iframe。

我的问题是,我没有得到过滤器中请求的页面的正确url。

我的过滤器捕捉

下面显示的是筛选,寻找XHTML页面。

chain.doFilter(request, response); 

HttpSession session = req.getSession(false); 
if(null != session && (uri.contains(".xhtml") || null != session.getAttribute("userid"))){ 
    if(null != session.getAttribute("userid")){ 
     String userid = session.getAttribute("userid").toString(); 
     //for saving usage details 
     if(uri.contains(".xhtml")){       
      System.out.println(".......Requeted Page.........."+req.getRequestURL().toString()); 
     saveUserUsage(req); 
     } 
    } 
} 

即使在菜单中选择了不同的链接,url进入过滤器的地方也是userdeskop.xhtml。

+1

你检查即通过Firebug的,如果点击浏览器的预期.xhtml/.jsf页面被请求链接后/获取?我猜,独立于你点击的东西,浏览器所请求的页面总是相同的。 –

+0

我在我的tempalte中使用了iframe。 – WSDL

+0

那么,请求/点击按钮后,iFrame-Request仍然应该由FireBug显示。 –

回答

1

原因相同的URL独立于点击菜单可能是JSF Lifecycle

  • 它决定在服务器端上的页面提供。

从这一方面看,独立于您点击的内容,例如,一个JSF Mojarra实现,请求的页面可能总是相同的 - 只是参数不同...并且服务器重定向到期望的页面(这对于您的过滤器来说已经太晚了,以至于无法识别;-))。

更新:我会尝试得到一个阶段监听器之前被执行或后呈现响应阶段,因为那里的导航目标应该可以解决。在听众像(未经测试示例代码)

public void afterPhase(PhaseEvent event) 
{ 
    FacesContext context = event.getFacesContext(); 
    String viewId = context.getViewRoot().getViewId(); 
    .... 
} 

可以帮助您解决最后的URL。

如果要解决主菜单中的URL(我猜,链接是静态的,没有管理bean方法需要调用),您也可以使用h:outputLink,其解析为固定的网址(见详细信息请参考When should I use h:outputLink instead of h:commandLink?) - 这将适用于您已经存在的侦听器。

希望它可以帮助...

+0

任何解决方案,以获得URL在过滤器? @ L-Ray – WSDL

+1

查看更新。提供反馈,如果它的工作...是的,upvotes赞赏。 –

+0

谢谢L-Ray我得到了网址 – WSDL