从JSF页面设置bean属性

时间:2010-08-13 15:38:11

标签: jsf javabeans

我需要做一件非常简单的事情 - 将当前URL从JSF(2.0)页面传递给托管bean。这是获取登录表单的URL所必需的,登录表单将在登录后将用户重定向回当前页面。 (我使用GAE并且bean是围绕其用户服务的包装,如果它确实重要)。我试过的任何明显方式都不起作用 <c:set /> - 不起作用(没有任何错误或警告信息)
将当前URL作为参数的getter - 不起作用 这么多问题和许多食谱,但都很复杂而且不优雅。为什么?可能是我(正如其他人要求的那样)错过了一个关键的设计原则?我会感谢任何答案 - 简单直接的食谱或解释为什么不这样做。

1 个答案:

答案 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();