如何访问JSF中的ServletConfig托管bean

问题描述:

目前,我尝试将Confident CAPTCHA集成到我的JSF项目中。类ConfidentCaptchaClient的构造函数如下:如何访问JSF中的ServletConfig托管bean

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

这需要一个ServletConfig说法。如何在托管bean中获取它?

+0

@BalusC:哦,我想我需要一些如何获取正在服务请求的当前Servlet实例。我会尝试实例化一个Servlet对象,看看它是如何发生的。谢谢! :D – 2013-04-05 17:42:07

+0

@BalusC::P目前,我正在使用PrimeFace的验证码。不过,我的申请将在中国使用,Captcha在那里的工作不太好。因此,我的老板让我寻找替代品。 :)我相信你一定与许多验证码解决方案合作过。你介意给我推荐一个或两个解决方案:D – 2013-04-05 17:45:42

+0

@BalusC:是的,它不是'Servlet'。它只需要访问'ServletConfig'。这就是为什么我想访问我的托管bean中的一个'Servlet',这样我就可以访问'ServletConfig'。 – 2013-04-05 17:46:57

这是一个破解。 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)派生自定义impl的ServletConfig

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

最后一步是一个过于简单化,但你会得到的想法。

如果你正在运行的Java EE(预3.0)的早期版本中,您将不得不进入ServletContext#getServlet()现在已不建议。