【问题标题】:How to access ServletConfig in JSF Managed bean如何在 JSF Managed bean 中访问 ServletConfig
【发布时间】:2013-04-05 17:34:50
【问题描述】:

目前,我正在尝试将Confident CAPTCHA 集成到我的 JSF 项目中。 ConfidentCaptchaClient类的构造函数如下:

public ConfidentCaptchaClient(String settingsXmlFilePath, HttpServletRequest request, javax.servlet.ServletConfig servletConfig)

这需要ServletConfig 参数。如何在托管 bean 中获取它?

【问题讨论】:

  • @BalusC:哦,我想我需要一些方法来获取当前为请求提供服务的 Servlet 实例。我将尝试实例化一个Servlet 对象,看看它是如何进行的。谢谢! :D
  • @BalusC: :P 目前,我实际上正在使用 PrimeFace 的验证码。但是,我的应用程序将在中国使用,而 Captcha 在那里不能很好地工作。因此,我的老板让我寻找替代方案。 :) 我相信您一定使用过许多验证码解决方案。你介意为我推荐一两个解决方案吗:D
  • @BalusC:是的,它不是Servlet。它只需要访问ServletConfig。这就是为什么我想在我的托管 bean 中访问 Servlet 以便我可以访问 ServletConfig

标签: jsf jsf-2 managed-bean servletconfig


【解决方案1】:

这是一个黑客。 ServletConfig 基本上是一个包含Servlet 参数的对象。您会在ServletRegistration 接口中找到几乎相同的方法和信息。因此,如果您将配置参数从ServletContext 本身中提取出来并填充到ServletConfig 的自定义实现中,这都是一样的。试试这个:

  1. 检索ServletContext 对象

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ServletContext servletContext =  (ServletContext) context.getExternalContext(); // Your servlet context here
    
  2. 从 servlet 上下文中,获取所需 servlet 的 servlet 注册对象

    ServletRegistration reg =   servletContext.getServletRegistration("theServlet"); //ServletRegistration contains all the info you'll need to populate a custom ServletConfig object
    
  3. 使用您从 (2) 中获得的信息来填充 ServletConfig 的自定义 impl

    ServletConfig myServletConfig = new MyCustomServletConfig();
    myServletConfig.setInitParams(reg.getInitParameters()); //do a simple transfer of content
    

最后一步过于简单化了,但你会明白的。

如果您运行的是以前版本的 Java EE(3.0 之前),您将可以访问现在已弃用的 ServletContext#getServlet()

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 2011-01-04
    • 2010-11-19
    • 2013-03-24
    • 1970-01-01
    • 2011-09-05
    • 2011-07-12
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多