如何在JSF Managed bean中访问ServletConfig

时间:2013-04-05 17:34:51

标签: jsf jsf-2 managed-bean servletconfig

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

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

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

1 个答案:

答案 0 :(得分: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
    
  4. 最后一步是过度简化,但你会明白这一点。

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