我正在使用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=...
参数附加到网址。
任何人都知道正确的规则应该是什么样的?
答案 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链接更正!