使用OcpSoft重写URL重写Join.path规则

时间:2014-05-10 15:37:18

标签: jsf url-rewriting prettyfaces ocpsoft-rewrite

我正在使用Ocpsoft Rewrite在JSF项目中执行URL重写。我有一个重定向规则,工作正常:

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

但是,由于重定向,这会更改导航栏中的URL。我以为我可以使用加入规则,但它不能像我预期的那样工作:

.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=...参数附加到网址。

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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