2013-04-05 5 views
2

На данный момент я пытаюсь интегрировать Confident CAPTCHA в проект JSF. Конструктор класса ConfidentCaptchaClient выглядит следующим образом:Как получить доступ к ServletConfig в JSF Управляемый компонент

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

Это требует ServletConfig аргумента. Как получить его внутри управляемого компонента?

+0

@BalusC: О, я думал, что мне нужно, чтобы кто-то получил текущий экземпляр сервлета, который служит для запроса. Я попытаюсь создать экземпляр объекта 'Servlet' и посмотреть, как это происходит. Благодаря! : D –

+0

@BalusC:: P На данный момент я фактически использую Captcha от PrimeFace. Тем не менее, моя заявка будет использоваться в Китае, и Captcha не работает очень хорошо там. Поэтому мой босс попросил меня искать альтернативу. :) Я считаю, что вы, должно быть, работали со многими решениями для конвертирования. Не возражаете ли вы рекомендовать мне решение или два: D –

+0

@BalusC: Да, это не «сервлет». Он просто требует доступа к 'ServletConfig'. Вот почему я хочу получить доступ к «Servlet» внутри моего управляемого компонента, чтобы получить доступ к «ServletConfig». –

ответ

1

Это взломать. Что такое ServletConfig, является в основном объектом, содержащим параметры Servlet. Вы найдете практически те же методы и информацию в интерфейсе ServletRegistration. Так что все равно, если вы выберете параметры конфигурации с самого ServletContext и заселите в пользовательской реализации ServletConfig. Попробуйте это:

  1. Получить ServletContext объект

    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ServletContext servletContext = (ServletContext) context.getExternalContext(); // Your servlet context here 
    
  2. Из контекста сервлета, получить регистрационный сервлета объект для сервлета вы хотите

    ServletRegistration reg = servletContext.getServletRegistration("theServlet"); //ServletRegistration contains all the info you'll need to populate a custom ServletConfig object 
    
  3. Используйте информацию, которую вы» (2) для заполнения пользовательского имплементации ServletConfig

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

Последний шаг - упрощение, но вы получите эту идею.

Если вы используете предыдущую версию Java EE (pre 3.0), у вас будет доступ к ServletContext#getServlet(), который теперь устарел.

Смежные вопросы