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

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

注:会话属性我需要的是使用acegi安全自动填充,所以我不能得到任何访问他们。

那现在该怎么办? 每一个帮助将不胜感激。

您可以使用以下expression式获取请求参数ID

 <h:outputText value="#{param['id']}" /> 
  • param – 对于此请求的请求参数的不可变映射,由参数名称进行键控。 只包含每个参数名称的第一个值。
  • sessionScope -A此请求的会话属性的映射,由属性名称进行键入。

JSF 1.0规范的第5.3.1.2节定义了必须由variablesparsing器parsing的对象。

您也可以使用bean(build议使用scoped),并通过FacesContext直接访问上下文。

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

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

我build议一个请求scoped bean的原因是,你可以在初始化时使用这些bean(最坏的情况是构造函数,大多数的框架给了你一些在bean初始化的时候做代码的地方),当你的请求进来的时候,

但是,这是一个黑客。 ;)你可能想要看看是否有一个JSF Acegi模块可以让你访问你需要的variables。

你可以使用

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

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

但是,如果你想传递参数到你的后备bean,使用f:viewParam可能是你想要的。 “查看参数是查询string参数和模型值之间的映射”。

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

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

你可以这样做:

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

因为requestScopesessionScope是一个Map对象。

您也可以使用像OcpSoft的PrettyFaces这样的工具将dynamic参数值直接注入到JSF Bean中。

假设你已经把你的对象作为属性放在你pipe理bean的当前FacesContext实例的会话映射上,你可以通过JSF页面获取它:

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

如果你的对象有一个属性,可以通过以下方式获取

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

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

这就是我在我们的login页面中使用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>