如何访问JSF中的ServletConfig托管bean
问题描述:
目前,我尝试将Confident CAPTCHA集成到我的JSF项目中。类ConfidentCaptchaClient
的构造函数如下:如何访问JSF中的ServletConfig托管bean
public ConfidentCaptchaClient(String settingsXmlFilePath, HttpServletRequest request, javax.servlet.ServletConfig servletConfig)
这需要一个ServletConfig
说法。如何在托管bean中获取它?
答
这是一个破解。 ServletConfig
是什么,基本上是一个包含Servlet
参数的对象。你会在ServletRegistration
界面中找到几乎相同的方法和信息。因此,如果您将配置参数从ServletContext
本身拉出并填充到ServletConfig
的自定义实现中,则完全相同。试试这个:
-
检索
ServletContext
对象FacesContext facesContext = FacesContext.getCurrentInstance(); ServletContext servletContext = (ServletContext) context.getExternalContext(); // Your servlet context here
-
从servlet上下文,得到servlet的servlet的登记对象,你的愿望
ServletRegistration reg = servletContext.getServletRegistration("theServlet"); //ServletRegistration contains all the info you'll need to populate a custom ServletConfig object
-
使用你的信息” (2)派生自定义impl的
ServletConfig
ServletConfig myServletConfig = new MyCustomServletConfig(); myServletConfig.setInitParams(reg.getInitParameters()); //do a simple transfer of content
最后一步是一个过于简单化,但你会得到的想法。
如果你正在运行的Java EE(预3.0)的早期版本中,您将不得不进入ServletContext#getServlet()
现在已不建议。
@BalusC:哦,我想我需要一些如何获取正在服务请求的当前Servlet实例。我会尝试实例化一个Servlet对象,看看它是如何发生的。谢谢! :D – 2013-04-05 17:42:07
@BalusC::P目前,我正在使用PrimeFace的验证码。不过,我的申请将在中国使用,Captcha在那里的工作不太好。因此,我的老板让我寻找替代品。 :)我相信你一定与许多验证码解决方案合作过。你介意给我推荐一个或两个解决方案:D – 2013-04-05 17:45:42
@BalusC:是的,它不是'Servlet'。它只需要访问'ServletConfig'。这就是为什么我想访问我的托管bean中的一个'Servlet',这样我就可以访问'ServletConfig'。 – 2013-04-05 17:46:57