我一直在阅读this similar SO question,但有些方法似乎对我不起作用。我的堆栈是 JSF2.0 (+ PrimeFaces),我部署到 JBoss 7 AS 。
有一个 Servlet 会将请求发送到 xhtml 页面(在同一个 war 中),但后者无法检索那里设置的属性的值。
这是Servlet代码片段:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
(...)
request.setAttribute("foo", "foo test");
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
这是 xhtml 页面上的代码:
<p><h:outputText value="#{sessionScope['foo']}" /></p>
<p><h:outputText value="#{param['foo']}" /></p>
<p><h:outputText value="#{request.getParameter('foo')}" /></p>
其中在三种情况中都没有出现任何内容。
DID的工作原理是使用支持bean(如对参考SO文章的回复中所建议的),其中属性是在 @PostConstruct 方法中获得的,如下所示:
@PostConstruct
public void init() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance()
.getExternalContext().getRequest();
message = (String) request.getAttribute("foo");
}
...其中检索到的值随后可在 xhtml 页面中使用。
但为什么一种方法有效但另一种方法无效?
答案 0 :(得分:3)
问题是您在servlet中的请求范围中设置了一个属性,但是在xhtml页面中,您正在编写request.getParameter("foo")
和sessionScope['foo']
来访问它。
在xhtml页面中写下:#{requestScope.foo}
,它将显示属性foo的值。