2012-01-08 77 views
6

我正在使用Netbeans的Spring MVC項目,並且我已將applicationContext.xml文件移至/ src/conf,因爲我已經讀取了WEB-INF不是正確的文件夾。我無法從/ src/java/web/controller中的控制器訪問應用程序上下文。我已經嘗試了幾種方法,並沒有部署該項目。如何從控制器訪問應用程序上下文

我想要一個鏈接來了解更多關於Web項目路徑的請求。

我認爲這可以幫助我們弄清楚:

public class TasksController implements Controller { 
private TaskManager taskManager; 
protected final Log logger = LogFactory.getLog(getClass()); 

public TaskController() { 
    ApplicationContext context = new FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");  
    taskManager = (TaskManager)context.getBean("taskManager"); 
} 

@Override 
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException { 

    logger.info("Returning view from TaskController"); 

    Map<String,Object> tasks = new HashMap<String,Object>(); 

// Get tasks from model 

    return new ModelAndView("tasks","tasks",tasks); 
} 

再見!

+0

又有什麼路徑?因爲控制器在/WEB-INF/applicationContext.xml中找不到applicationContext。謝謝 – honnix 2012-01-08 19:38:20

+0

我試圖創建一個TasksController來顯示JSP中的任務。我有一個在applicationContext.xml中定義的bean taskManager,我希望控制器獲取taskManager並使用getTasks()獲取任務。 – honnix 2012-01-08 20:04:38

回答

13

Ouch。好的,你不要在你的控制器中實例化新的上下文。上下文已經由Spring配置,你只需要向Spring詢問它。

讓你的控制器實現BeanFactoryAware,然後Spring將自動調用setBeanFactory注入的背景下爲您提供:

public class TasksController implements Controller, BeanFactoryAware { 
    private TaskManager taskManager; 

    public void setBeanFactory(BeanFactory context) { 
    taskManager = (TaskManager)context.getBean("taskManager"); 
    } 

    // handleRequest as before 
} 
+0

應該如何將bean taskManager注入到dispatcher-servlet.xml中的T​​askController? – honnix 2012-01-09 13:25:21

+0

@honnix:更好,是的。 – skaffman 2012-01-09 13:52:42

相關問題