我有一个JSF / JSP页面,一个托管bean,以及一个使用HttpServlet
方法扩展doPost
的单独文件/类。
我有一个单独的测试程序,它通过doPost
将{xml}对象发送到HttpURLConnection
方法。
想要什么:
doPost
方法(有效 - 我使用doPost
方法获取数据。)注意:
doPost
方法。doPost
方法执行request.getRequestDispatcher("/faces/xxx.jsp").forward(request, response);
(请求已正确加载数据)。 问题: 我还没有找到一种方法(可能非常明显)从servlet获取JSP托管bean的请求对象。
问题: JSP如何检索请求对象并将请求对象传递给托管bean? 它有一个端到端的例子吗? - 还没找到。
答案 0 :(得分:1)
我有一个JSF / JSP页面,一个托管bean,以及一个使用doPost方法扩展HttpServlet的单独文件/类。
停止在JSF中使用Servlet。 servlet显然有一些你想在其他地方重用的功能。只需将它重构为一个独立且可重用的类/方法,然后您可以在servlet类和JSF托管bean中导入/调用它。
关于你的实际问题:假设当你说“请求对象”时你实际上意味着“请求属性”,这似乎在JSF页面中无法访问,那么这只有两个原因:要么属性名称错误,要么它不是您期望的bean / pojo实例(如果您创建多个实例,则会发生这种情况)。
答案 1 :(得分:0)
您是否只是不确定如何从托管bean中获取请求?如果是这样,请从托管bean中的action方法中尝试:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
答案 2 :(得分:0)
假设您正在使用JSF,您可以从托管bean中执行的非常简单的操作就是将数据作为请求中的属性传递,然后分派到所需的servlet:
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.setAttribute("myData",myData);
context.getExternalContext().dispatch("/MyServlet");
context.responseComplete();
在你的servlet中:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String myData = (String)req.getAttribute("myData");
//Do something with myData }