Servlet中的JSF托管bean

Servlet中的JSF托管bean,jsf,servlets,Jsf,Servlets,有没有办法从servlet访问JSF托管bean?在servlet中,您可以通过以下方式获得请求范围的bean: Bean bean = (Bean) request.getAttribute("beanName"); Bean bean = (Bean) request.getSession().getAttribute("beanName); Bean bean = (Bean) getServletContext().getAttribute("beanName"); 和会话范围的b

有没有办法从servlet访问JSF托管bean?

在servlet中,您可以通过以下方式获得请求范围的bean:

Bean bean = (Bean) request.getAttribute("beanName");
Bean bean = (Bean) request.getSession().getAttribute("beanName);
Bean bean = (Bean) getServletContext().getAttribute("beanName");
和会话范围的bean,通过:

Bean bean = (Bean) request.getAttribute("beanName");
Bean bean = (Bean) request.getSession().getAttribute("beanName);
Bean bean = (Bean) getServletContext().getAttribute("beanName");
和应用程序范围的bean:

Bean bean = (Bean) request.getAttribute("beanName");
Bean bean = (Bean) request.getSession().getAttribute("beanName);
Bean bean = (Bean) getServletContext().getAttribute("beanName");

据我所知,JSF不一定急于实例化bean。因此,如果以前没有通过JSF层访问bean,那么这将失败。@lexi:没错。然而,如果您需要自己在servlet中实例化这些bean,而不是获取已经创建的bean,那么在方法/设计中就有更多的错误。要么任务完全由JSFbean完成,要么您根本不需要JSF来完成特定的任务。很难说,因为OP的实际功能需求是模糊的。记住,Servlet基本上只是一个页面/前端控制器,FacesServlet已经完成了这个任务。也许servlet做得太多了,或者OP在JSFbean中根本做不到同样的事情。可以将JSF用于bean管理,将非Faces servlet用于前端,这不太适合JSF。例如,类似DWR的东西。就我个人而言,我通常更喜欢Spring for DI,而不是JSF管理的bean,但在很多情况下,JSF对于bean管理来说已经足够了。