我有一个jsp站点,我使用request.getAttribute获取属性。我正在寻找一种在 JSF 中获取该属性的方法(在同一个雄猫中运行)。这是我在互联网上找到的:
HttpServletRequest requestObj = (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest();
String value = (String) requestObj.getAttribute("property");
但结果(值)保持空。
可能的原因是什么,它在第一种情况下有效,但在第二种情况下无效?
可能的原因是什么,它在第一种情况下有效,但在第二种情况下无效?
如果该属性不再存在,那么它只涉及一个完全不同的请求。可能您已经发送了重定向,或者网络浏览器已经发送了新请求等。你的问题的真正答案很难给出,因为你没有详细说明你的问题中的功能要求。您刚刚发布了一些代码片段并说"为什么这不起作用?
无论如何,只要请求/响应本身,请求属性就会存在,并且它们不会保留在后续请求中。为此,您更愿意将其存储为会话属性,或者在重定向的情况下作为请求参数传递。或者,当您已经在使用 JSF 2.0 时,将其存储为视图作用域 Bean 的属性也应该这样做,以防随后要从同一视图访问 Bean。
要了解有关HTTP servlet请求/响应生命周期的更多信息,我建议您自己完成这个答案。
与具体问题无关:每当你需要从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。