我有一个jsp站点,我使用request.getAttribute获取一个属性。 我正在寻找一种方法来获取jsf中的属性(在同一个tomcat中运行)。这是我在互联网上找到的:
HttpServletRequest requestObj = (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest();
String value = (String) requestObj.getAttribute("property");
但结果(值)保持为空。
可能的原因是它在第一种情况下起作用而在第二种情况下不起作用?
答案 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。