3

我正在使用 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/123foo/protected/index.xhtml?venueID=123,但我没有得到?venueID=...附加到 URL 的参数。

任何人都知道正确的规则应该是什么样的?

4

2 回答 2

2

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

String id = HttpServletRequest.getParameter("venueID");
于 2014-05-11T07:16:38.227 回答
1

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

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

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

于 2014-05-14T14:59:29.247 回答