从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"]}
因为requestScope
或sessionScope
是一个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>