56

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

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

那么现在该怎么办呢?

4

8 回答 8

92

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

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

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

于 2009-02-15T11:07:52.723 回答
46

您还可以使用 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 模块可以让你访问你需要的变量。

于 2009-02-17T20:01:18.007 回答
36

您可以使用

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

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

但是,如果您想将参数传递给您的支持 bean,那么 usingf:viewParam可能就是您想要的。“视图参数是查询字符串参数和模型值之间的映射。”

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

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

于 2011-11-15T09:28:41.177 回答
14

你可以这样:

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

因为requestScopeorsessionScope是一个 Map 对象。

于 2012-11-12T08:34:51.627 回答
6

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

于 2010-02-08T16:40:13.443 回答
5

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

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

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

<h:ouputText value="#{sessionScope['yourObject'].anyProperty }" />
于 2013-07-17T12:03:06.620 回答
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>
于 2009-02-18T09:32:03.783 回答
0

在 bean 中,您可以使用 session.getAttribute("attributeName");

于 2019-03-19T13:26:52.617 回答