2012-01-08 35 views
6

Estoy usando Spring MVC Project de Netbeans y he movido el archivo applicationContext.xml a/src/conf porque he leído que WEB-INF no es la carpeta correcta. No puedo acceder al contexto de la aplicación desde un controlador en/src/java/web/controller. Lo intenté de varias maneras y no implementa el proyecto.Cómo acceder a ApplicationContext desde un controlador

Me gustaría obtener un enlace para obtener más información sobre las rutas en un proyecto web, súplicas.

Creo que esto nos puede ayudar a averiguar:

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); 
} 

Bye!

+0

y lo que es el camino? porque el controlador no encuentra el applicationContext en /WEB-INF/applicationContext.xml. Gracias – honnix

+0

Estoy tratando de crear un TasksController para mostrar las tareas en un JSP. Tengo un taskManager de beans definido en applicationContext.xml y quiero que el controlador obtenga el taskManager y obtenga las tareas con getTasks(). – honnix

Respuesta

13

Ouch. De acuerdo, no crea instancias de contextos nuevos desde su controlador. El contexto ya ha sido configurado por Spring, solo tienes que pedirlo a Spring.

que el controlador de implementar BeanFactoryAware, y la primavera le inyectará el contexto para usted llamando automáticamente setBeanFactory:

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

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

    // handleRequest as before 
} 
+0

¿Debería inyectar el taskManager de beans a TaskController en dispatcher-servlet.xml? – honnix

+0

@honnix: Aún mejor, sí. – skaffman

Cuestiones relacionadas