【问题标题】:Using pure JSF to obtain calling page使用纯JSF获取调用页面
【发布时间】:2011-09-08 16:27:11
【问题描述】:

JSF 1.2-1.2_07-b03-FCS

JSTL 1_1-mr2(特殊版本)

Java 1.6.0_22-b04

Eclipse 3.6.0 (Helios)

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

IE 7.0.5730.13

火狐: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"); 

然而,这需要包含 servlet-api.jar 文件的 HttpServletRequest。

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

谢谢, 约翰

【问题讨论】:

    标签: jsf


    【解决方案1】:

    然而,这需要包含 servlet-api.jar 文件的 HttpServletRequest

    这毫无意义。 JSF 本身已经有一个 Servlet API 依赖项。也许您指的是 IDE 中的编译错误,因为该项目根本与目标运行时无关?在这种情况下,请仔细阅读:How do I import the javax.servlet API in my Eclipse project?

    至于具体问题,使用ExternalContext#getRequestHeaderMap()获取请求头的映射即可。

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

    【讨论】:

    • 是的,它有效。走了很多错误的路,但错过了 getRequestHeaderMap()。谢谢你。约翰
    • 哎哟! - 点。实际上,我在 API 上花费的时间确实比我承认的要多——只是在寻找错误的东西。许多互联网搜索,但没有找到像您的解决方案那样干净。约翰
    • 没问题。它有助于记住ExternalContext 是JSF 在幕后使用的“原始” Servlet API 类和方法的关键入口点,例如HttpServletRequestHttpServletResponseHttpSessionServletContext。确实有很多吸气剂。我的答案中的ExternalContext 部分是可点击的,并直接指向 API 文档。
    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2011-04-16
    相关资源
    最近更新 更多