访问servlet中的FacesContext



我正在开发一个JSF (v1.2)应用程序。在我的应用程序中,我需要一个通用的servlet,可以服务于任何资源(PDF,图像,Excel等)。我的想法是让调用者发送所需的信息,这样我就可以使用一些配置找到正确的委托类。

这个委托类将负责提供正确的资源。

例如这是请求url

http://example.com/servlet?delegatorid=abcd
我的Servlet代码是这样的:
protected void doGet(HttpServletRequest request, HttpServletResponse response){
 String delegatorID=request.getParameter("delegatorid");
//Get the configuration from Configuration table
configuration=getConfiguration(delegatorID);
//invoke the method of the delegator class based on this configuration
Object result=invokeMethod(configuration);
//write the response to the stream
}

我的问题是在JSF项目中做到这一点的最好方法是什么?

  1. 我应该在这个操作中完全避免JSF依赖吗?我可以找到委托方法和类,并使用反射调用它。如果我避免JSF依赖,将来会有任何潜在的限制吗?我能想到的一个问题是,在其中一个代码中,我需要从session中获取用户信息。我通过FacesContext来做这个。由于FacesContext不可用,它将失败,我应该有另一个选项来获得会话。
  2. 如果我必须引入JSF依赖,我如何获得FacesContext在这里吗?据我所知,只有豆子是储存在里面的应用范围可以在这里访问。我不想那么做。还有别的办法吗?
  3. 比起使用servlet,我可以通过调用ManagedBean来实现这一点吗方法直接使用URL?这会给我FacesContext。我我认为我需要一个虚拟的JSP页面来管理bean方法得到调用。

你能告诉我你的想法吗?

FacesContext(和ExternalContext)只是HttpServletRequest, HttpServletResponse, HttpSession, ServletContext等的外观,以及一些在普通servlet中根本不需要的JSF细节。ExternalContext#getSessionMap()只不过是HttpSession#get/setAttribute()的抽象映射。

在普通的servlet中,会话仅由request.getSession()可用,应用程序由getServletContext()可用。另请参阅其他相关问题:在任何Servlet相关类中按名称获取JSF托管bean。

您还可以将需要由JSF和Servlet共享的代码重构为不依赖于javax.faces.*javax.servlet.*类(或最多只依赖于javax.servlet.*类)的实用程序方法,并最终让每个调用者传递必要的信息。

相关内容

  • 没有找到相关文章

最新更新