从JSF页面获取请求和会话参数和属性

时间:2009-02-15 07:07:39

标签: session jsf request facelets

我正在使用带有facelets的JSF,我需要在JSF页面中获取请求和会话参数。在JSP页面中,我得到了这样的参数:"${requestScope.paramName}""${sessionScope.paramName}"。但是现在使用JSF之后只有bean,除了bean属性之外你无法获得任何值。

注意:会话属性我需要使用acegi安全性自动填充,因此我无法访问它们。

那现在该怎么办?

8 个答案:

答案 0 :(得分:87)

您可以使用以下表达式获取请求参数 id

<h:outputText value="#{param['id']}" />
  • param - 此请求的请求参数的不可变Map,键入方式 参数名称。仅包含每个参数名称的第一个值。
  • sessionScope - 此请求的会话属性的地图,键入方式 属性名称。

JSF 1.0 specification的第5.3.1.2节定义了必须由变量解析器解析的对象。

答案 1 :(得分:40)

您也可以使用bean(建议使用作用域)并通过FacesContext直接访问上下文。

您可以使用以下代码获取HttpServletRequest和HttpServletResposne对象:

HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();

在此之后,您可以通过getParameter(paramName)访问各个参数,或通过getParameterMap() req对象访问整个地图

我建议使用请求范围的bean的原因是你可以在初始化期间使用这些(最糟糕的情况是构造函数。大多数框架为你提供了在bean初始化时做代码的地方)并且它们将在你的请求到来时完成英寸

然而,这是一个黑客攻击。 ;)您可能想要查看是否有一个JSF Acegi模块,它允许您访问所需的变量。

答案 2 :(得分:32)

您可以使用

<h:outputText value="#{param['id']}" />

<h:outputText value="#{request.getParameter('id')}" />

但是,如果要将参数传递给后台bean,则使用f:viewParam可能就是您想要的。 “视图参数是查询字符串参数和模型值之间的映射。”

<f:viewParam name="id" value="#{blog.entryId}"/>

这会将GET参数的id参数设置为博客bean的entryId字段。有关详细信息,请参阅http://java.dzone.com/articles/bookmarkability-jsf-2

答案 3 :(得分:13)

你可以这样:

#{requestScope["paramName"]} ,#{sessionScope["paramName"]}

因为requestScopesessionScope是地图对象。

答案 4 :(得分:6)

您还可以使用像OcpSoft PrettyFaces这样的工具将动态参数值直接注入JSF Beans。

答案 5 :(得分:5)

假设您已将对象作为属性放在来自托管bean的FacesContext的当前实例的会话映射中,您可以通过以下方式从JSF页面获取它:

<h:outputText value="#{sessionScope['yourObject'] }" />

如果您的对象有属性,请通过以下方式获取:

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />

答案 6 :(得分:4)

您确定无法从JSF页面访问请求/会话范围变量吗?

这就是我在登录页面中使用Spring Security所做的事情:

<h:outputText
    rendered="#{param.loginFailed == 1 and SPRING_SECURITY_LAST_EXCEPTION != null}">
    <span class="msg-error">#{SPRING_SECURITY_LAST_EXCEPTION.message}</span>
</h:outputText>

答案 7 :(得分:0)

在Bean中,您可以使用session.getAttribute(“ attributeName”);