2014-10-11 2 views
2

Я создал bean-компонент ApplicationScoped, у которого есть метод PostConstruct с именем start. Всякий раз, когда я хочу, чтобы получить экземпляр FacesContext в методе запуска и возвращает null:Экземпляр FacesContext имеет значение null в ApplicationScoped Managedbean

@ManagedBean 
@ApplicationScoped 
public class RemoveOldFilesScheduler implements Serializable { 

    @PostConstruct 
    private void start() { 
     final FacesContext facesContext = FacesContext.getCurrentInstance(); 
     if(facesContext != null) { 
      String realDownloadDirName = facesContext.getExternalContext().getRealPath("/") + DOWNLOAD_DIRECTORY; 
     File downloadDir = new File(realDownloadDirName); 
     if (downloadDir.exists()) { 
      removeOldFiles(downloadDir.listFiles()); 
     } 
} 
} 

Как я могу получить доступ к facesContext в этой ситуации?

Я хочу получить реальный путь к каталогу загрузки в методе start, и я не знаю, как получить путь к моей директории, не используя FaceContext.

Есть ли другой способ сделать это?

+0

Какую версию JSF вы работаете и в какой контейнер? – kolossus

+0

Я использую последнюю версию jsf (2.2.8-02). –

+0

Мне пришлось реализовать мой класс как «Listener», поэтому я могу получить доступ к 'ServletContext' в' contextInitialized (ServletContextEvent sce) ' –

ответ

0

Я реализует свой класс как Listener и он работал, и я могу получить доступ к ServletContext в contextInitialized метода:

public class RemoveOldFilesListener implements ServletContextListener { 

    public ServletContext servletContext; 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
     servletContext = sce.getServletContext(); 
     String realDownloadDirName = servletContext.getRealPath("/") + DOWNLOAD_DIRECTORY; 
     File downloadDir = new File(realDownloadDirName); 
     if (downloadDir.exists()) { 
      removeOldFiles(downloadDir.listFiles()); 
     } 
} 
+0

Это, вероятно, лучший и более логичный способ сделать это, поскольку логика находится вне собственно приложения JSF (что должно) – kolossus

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