gpt4 book ai didi

jsf - 在 servlet 中访问 FacesContext

转载 作者:行者123 更新时间:2023-12-02 10:52:11 25 4
gpt4 key购买 nike

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

该委托(delegate)者类将负责提供正确的资源。

例如这是请求网址

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 依赖吗?我可以找到委托(delegate)者方法和类并使用反射调用它。如果我避免依赖 JSF,将来是否会有任何潜在的限制。 [我能想到的一个问题是,在其中一段代码中,我需要从 session 中获取用户信息。我正在通过 FacesContext 执行此操作。由于 FacesContext 不可用,它会失败,我应该有另一个选项来获取 session 。
  2. 如果我必须引入 JSF 依赖项,我如何获取 FacesContext这里?据我所知,只有存储在可以在此处访问应用程序范围。我不想那样做。还有其他方法可以获取吗?
  3. 我可以通过调用 ManagedBean 来代替使用 servlet直接使用URL的方法?这会给我 FacesContext。我我想我需要一个虚拟 JSP 页面来托管 bean 方法被调用。

您能告诉我您对此的看法吗?

最佳答案

FacesContext(和ExternalContext)只是一个 facade HttpServletRequestHttpServletResponseHttpSessionServletContext 等以及一些您不需要的 JSF 细节全部都在一个普通的 Servlet 中。 ExternalContext#getSessionMap()只不过是HttpSession#get/setAttribute()的抽象映射。

在普通的 servlet 中, session 仅可通过 request.getSession() 获取,应用程序可通过 getServletContext() 以通常的方式获取。另请参阅以下相关问题:Get JSF managed bean by name in any Servlet related class .

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

关于jsf - 在 servlet 中访问 FacesContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com