我需要做一件非常简单的事情 - 将当前URL从JSF(2.0)页面传递给托管bean。这是获取登录表单的URL所必需的,登录表单将在登录后将用户重定向回当前页面。 (我使用GAE并且bean是围绕其用户服务的包装,如果它确实重要)。我试过的任何明显方式都不起作用
<c:set />
- 不起作用(没有任何错误或警告信息)
将当前URL作为参数的getter - 不起作用
这么多问题和许多食谱,但都很复杂而且不优雅。为什么?可能是我(正如其他人要求的那样)错过了一个关键的设计原则?我会感谢任何答案 - 简单直接的食谱或解释为什么不这样做。
答案 0 :(得分:1)
#{request.requestURL}
可以使用它(或者如果您只想要域相对路径,请使用#{request.requestURI}
)。使用f:param
传递它并@ManagedProperty
来处理它。
<h:commandButton action="#{bean.submit}" value="submit">
<f:param name="url" value="#{request.requestURL}" />
</h:commandButton>
与
@ManagedProperty("#{param.url}")
private String url;
注意h:commandButton
内的f:param
在JSF 1.x中不起作用。您想改用h:commandLink
。
更新:我知道你想“将当前网址传递给托管bean”。但实际上你想“访问托管bean中的当前URL”。
在这种情况下,要么将#{param.url}
替换为#{request.requestURL}
:
@ManagedProperty("#{request.requestURL}")
private String url;
或通过HttpServletRequest
从JSF引擎下获取原始ExternalContext#getRequest()
实例:
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String requestURL = request.getRequestURL();