Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 从JSF页面获取请求和会话参数及属性_Session_Jsf_Request_Facelets - Fatal编程技术网

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

Session 从JSF页面获取请求和会话参数及属性,session,jsf,request,facelets,Session,Jsf,Request,Facelets,我将JSF与facelets一起使用,我需要在JSF页面中获取请求和会话参数。在JSP页面中,我得到了如下参数:“${requestScope.paramName}”或“${sessionScope.paramName}”。但是现在在使用JSF之后,只有bean,除了bean属性之外,您无法获得任何值 注意:我需要的会话属性是使用acegi security自动填充的,因此我无法访问它们 那么现在该怎么办呢?您可以使用以下表达式获取请求参数id: <h:outputText value="

我将JSF与facelets一起使用,我需要在JSF页面中获取请求和会话参数。在JSP页面中,我得到了如下参数:
“${requestScope.paramName}”
“${sessionScope.paramName}”
。但是现在在使用JSF之后,只有bean,除了bean属性之外,您无法获得任何值

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


那么现在该怎么办呢?

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

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

  • param此请求的请求参数的不可变映射,由 参数名。仅包含每个参数名称的第一个值
  • sessionScope—此请求的会话属性映射,由 属性名
的第5.3.1.2节定义了必须由变量解析器解析的对象。

您还可以使用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模块允许您访问所需的变量

您确定不能从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>

#{SPRING\u SECURITY\u LAST\u EXCEPTION.message}

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

您可以使用

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

这将把GET参数的id参数设置为blogbean的
entryId
字段。有关详细信息,请参见。

您可以这样:

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

因为
requestScope
sessionScope
是一个映射对象。

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

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

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

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


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

+1,但究竟是谁想出了如此荒谬的API来获取单个参数?@GDemecki:Noone。。。是的,也许是php人员转向了JSF。如何将会话对象作为属性放在托管bean中FacesContext当前实例的会话映射上???