2012-01-08 33 views
6

NetBeansのSpring MVCプロジェクトを使用していますが、WEB-INFが正しいフォルダではないので、applicationContext.xmlファイルを/ src/confに移動しました。/src/java/web/controller内のコントローラからアプリケーションコンテキストにアクセスできません。私はいくつかの方法を試しましたが、プロジェクトを展開しません。コントローラからapplicationContextにアクセスする方法

私は、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

+0

私はJSPでタスクを表示するTasksControllerを作成しようとしています。私はapplicationContext.xmlで定義されたbean taskManagerを持っています。コントローラにtaskManagerを取得し、getTasks()でタスクを取得させます。 – honnix

答えて

13

大です。 OK、コントローラ内から新しいコンテキストをインスタンス化しません。コンテキストは既にSpringによって設定されています。Springにそれを要求するだけです。

コントローラがBeanFactoryAwareを実装行い、春は自動的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のTaskControllerに挿入する必要がありますか? – honnix

+0

@honnix:さらに良い、はい。 – skaffman

関連する問題