首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在servlet中访问FacesContext

在servlet中访问FacesContext
EN

Stack Overflow用户
提问于 2012-12-24 05:31:04
回答 1查看 6.8K关注 0票数 3

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

这个委托类将负责服务正确的资源。

例如,这是请求url

代码语言:javascript
复制
http://example.com/servlet?delegatorid=abcd

我的Servlet代码是这样的。

代码语言:javascript
复制
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依赖,将来会有任何潜在的限制吗?[我可以考虑的一个问题是,在其中一个代码中,我需要从会话中获取用户信息。我是通过FacesContext来做这个的。由于FacesContext不可用,它将失败,我应该有另一个选项来获得会话。
  2. 如果我必须引入JSF依赖项,那么如何在这里获得FacesContext呢?据我所知,这里只能访问存储在应用程序范围中的bean。我不想那样做。还有别的办法可以得到吗?
  3. 不使用servlet,我可以通过直接使用URL调用ManagedBean方法来做到这一点吗?这将给我FacesContext。我想我需要一个虚拟JSP页面来调用托管bean方法。

你能让我听听你对此的想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-24 11:27:30

FacesContext (和ExternalContext)只是HttpServletRequestHttpServletResponseHttpSessionServletContext、etcetara上的一个立面,以及一些在普通的servlet中根本不需要的JSF细节。ExternalContext#getSessionMap()不过是HttpSession#get/setAttribute()的抽象映射。

在普通的普通servlet中,会话仅由request.getSession()提供,而应用程序则由getServletContext()以通常的方式使用。另见这个相关问题:在任何与Servlet相关的类中按名称获取JSF托管bean

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14017441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档