【问题标题】:URL rewriting with OcpSoft rewrite Join.path rule使用 OcpSoft rewrite Join.path 规则重写 URL
【发布时间】:2014-06-28 06:41:02
【问题描述】:

我正在使用 Ocpsoft Rewrite 在 JSF 项目中执行 URL 重写。我有一个重定向规则,效果很好:

.addRule()
        .when(Direction.isInbound().and(Path.matches("/venue/{id}")))
        .perform(Redirect.temporary(context.getContextPath() + 
                "/protected/index.xhtml?venueID={id}"));

但是,由于重定向,这会更改导航栏中的 URL。我以为我可以改用 Join 规则,但它并没有像我预期的那样工作:

.addRule(Join.path("/venue/{venueID}").to("/protected/index.xhtml"))
        .perform(Log.message(Level.INFO, "Rewrite is active!"));

我认为这条规则会从 foo/venue/123 重定向到 foo/protected/index.xhtml?venueID=123,但我没有将 ?venueID=... 参数附加到 URL。

有人知道正确的规则应该是什么样子吗?

【问题讨论】:

    标签: jsf url-rewriting prettyfaces ocpsoft-rewrite


    【解决方案1】:

    您的规则看起来是正确的。但是 Join 不会导致重定向。相反,它在内部转发请求。这意味着 URL 不会更改。所以你不会在 URL 中“看到”参数venueID。但您将能够使用标准 Servlet API 读取参数:

    String id = HttpServletRequest.getParameter("venueID");
    

    【讨论】:

    • 我在 GWT 应用程序中遇到了同样的问题,但是我无法在 GWT 端获取参数:Window.Location.getParameter("param");
    【解决方案2】:

    如果你真的想要,你可以改为Forward

    .addRule()
    .when(Direction.isInbound().and(Path.matches("/venue/{id}")))
    .perform(Forward.to("/protected/index.xhtml?venueID={id}"));
    

    但这不会像 Join 那样处理出站 HTML 链接更正!

    【讨论】:

    • 好的,但是如果还有其他参数,是否转发?
    • 不,它只会转发你在模式中指定的参数。
    • 然而,正如克里斯蒂安之前提到的。所有参数,包括来自原始 URL 的原始参数,都将通过标准 Servlet API 提供:
    • String id = HttpServletRequest.getParameter("venueID");
    • 如何在 GWT 端达到这些参数? Window.Location.getParameter("param") 不起作用。
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多