用于jsf的HttpServletRequest

时间:2011-05-13 15:33:43

标签: jsp jsf servlets

我有一个jsp站点,我使用request.getAttribute获取一个属性。 我正在寻找一种方法来获取jsf中的属性(在同一个tomcat中运行)。这是我在互联网上找到的:

HttpServletRequest requestObj = (HttpServletRequest)         
FacesContext.getCurrentInstance().getExternalContext().getRequest();
    String value =  (String) requestObj.getAttribute("property");

但结果(值)保持为空。

可能的原因是它在第一种情况下起作用而在第二种情况下不起作用?

1 个答案:

答案 0 :(得分:4)

  

可能的原因是它在第一种情况下有效但在第二种情况下不起作用吗?

如果该属性不再存在,那么它只涉及完全不同的请求。可能你已经发送了一个重定向,或者webbrowser已经发送了一个新的请求等等。由于你没有详细说明你的问题中的功能需求,很难给出你问题的真正答案。你刚刚发布了一些代码片段并说“为什么这不起作用?”。

无论如何,只要请求/响应本身,请求属性就会生效,并且它们不会保留在后续请求中。为此,您更愿意将其存储为会话属性,或者在重定向的情况下作为请求参数传递。或者,当您已经使用JSF 2.0时,将其存储为视图范围bean的属性也应该适用于随后从同一视图访问bean的情况。

要了解有关HTTP servlet请求/响应生命周期的更多信息,我建议您完成this answer


无关具体问题:每当你需要从JSF封面下运输原始Servlet API时,如果你真的做得对,你应该好好休息三思而后行方式(阅读:无需回退到原始javax.servlet API)。例如,它不应该更适合作为一个完整的JSF托管bean吗?

无论如何,ExternalContext#getRequestMap()都可以访问 的请求属性。

Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
String value = (String) requestMap.get("property");

无需使用原始Servlet API。