2010-09-20 4 views
2

есть ли эквивалент FacesContext, но в среде сервлета?FacesContext и «Servlet» Context

У меня есть DAOSessionManager, который обрабатывает транзакцию в моей базе данных. Я могу использовать FacesContext для идентификации текущего http-запроса, когда текущая страница написана с использованием JSF, но как насчет сервлетов?

я не могу найти способ, чтобы получить текущий контекст сервлета или HTTPRequest ...

Спасибо.

PS: Да, имея ссылку на FacesContext из моего слоя DAO, это позор, но это начало.

ответ

1

Это ServletContext. Он доступен внутри классов сервлета методом унаследованного getServletContext().

protected void doGet(HttpServletRequest request, HttpServletResponse response) { 
    ServletContext context = getServletContext(); 
    // ... 
} 

Основное отличие FacesContext является то, что ServletContext не ThreadLocal, так что вы не можете получить его «статически» из текущего потока, как FacesContext#getCurrentInstance() делает. Вам действительно нужно проходServletContext эталонным вокруг в методы DAO там, где вам это нужно:

someDAO.doSomething(getServletContext()); 

Или еще лучше, чтобы избежать тесной связи, просто извлечь нужную информацию из него и передать его:

Object interestingData = getServletContext().getAttribute("interestingData"); 
someDAO.doSomething(interestingData); 
+0

Я прекрасно понимаю ваш подход, но он не будет соответствовать моей архитектуре. У меня 3 слоя (dao, domain и GUI - нет необходимости в выделенном контрольном слое, как в MVC/MVP). –

+0

Итак, мой доменный уровень isnt и не может знать о servletcontext. Я просто хочу назвать свои репозитории, и какая-то техническая часть уровня dao будет иметь дело с менеджером транзакций, постоянством (но он должен быть одним и тем же в течение одного «сеанса»). На самом деле, я пытаюсь подражать открытой сессии без весны: я не очень разбираюсь в java, и я использую движок Google. –

+0

Для этого используется комбинация 'Filter' и' ThreadLocal'. Будьте осторожны. – BalusC

-1
ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext(); 
Смежные вопросы