使用纯JSF获取调用页面

使用纯JSF获取调用页面,jsf,Jsf,JSF 1.2-1.2_07-b03-FCS JSTL 1_1-mr2(特殊建造) Java 1.6.0_22-b04 Eclipse 3.6.0(太阳神) Tomcat 6.0.28(也需要在Weblogic上运行) IE 7.0.5730.13 Firefox:6.0 我们有第页: http://{host:port}/mybase/faces/mypage.jsp 它通过超链接、重定向等从多个外部页面调用 我们希望以纯“JSF”的方式确定调用它的页面的URL(以便实现命令按钮“后退”按钮)

JSF 1.2-1.2_07-b03-FCS

JSTL 1_1-mr2(特殊建造)

Java 1.6.0_22-b04

Eclipse 3.6.0(太阳神)

Tomcat 6.0.28(也需要在Weblogic上运行)

IE 7.0.5730.13

Firefox:6.0

我们有第页: http://{host:port}/mybase/faces/mypage.jsp

它通过超链接、重定向等从多个外部页面调用

我们希望以纯“JSF”的方式确定调用它的页面的URL(以便实现命令按钮“后退”按钮)

我们知道我们可以做到这一点:

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();        
    HttpServletRequest origRequest = 
        (HttpServletRequest)externalContext.getRequest();
    String referrer = origRequest.getHeader("referer"); 
但是,这需要HttpServletRequest,它需要包含servlet-api.jar文件

问题是:这可以用纯JSF的方式来完成,因此,不包括servlet-api.jar文件吗

谢谢, 约翰

但是,这需要HttpServletRequest,它需要包含servlet-api.jar文件

这毫无意义。JSF本身已经有一个ServletAPI依赖项。可能您指的是IDE中的编译错误,因为该项目根本没有与目标运行时关联?在这种情况下,请仔细阅读:

至于具体问题,只需使用获取请求头的映射即可

String referrer = externalContext.getRequestHeaderMap().get("referer"); 
// ...

是的,它起作用了。走了很多错误的路,但错过了getRequestHeaderMap()。非常感谢。约翰努奇!-我明白了。事实上,我花在API上的时间确实比我承认的要多——只是在寻找错误的东西。许多互联网搜索,但没有发现像您的解决方案那样干净。约翰诺问题。它有助于记住
ExternalContext
是JSF在幕后使用的“原始”ServletAPI类和方法的关键入口点,例如
HttpServletRequest
HttpServletResponse
HttpSession
ServletContext
。确实有很多有成就感的人。我的答案中的
ExternalContext
部分可以单击,并直接指向API文档。