2012-12-03 181 views
3

我是新來的春天,所以請忍受我。如何訪問Spring MVC控制器類中的自定義bean?

我在查看本指南(http://java2t.com/233/using-spring3-jdbctemplate-rowmapper-to-return-list-of-records/)。 它在eclipse中使用「正常」的java項目。我試圖模擬使用動態Web項目的例子,但我沒有取得任何成功。

我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" 
    version="3.0"> 

    <display-name>StaffDirectory</display-name> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list>  
</web-app> 

我爲spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="org.flinders.staff.directory" /> 

    <mvc:annotation-driven /> 
    <mvc:resources mapping="/resources/**" location="/resources/" /> 
    <mvc:view-controller path="/" view-name="index" /> 

    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/test" /> 
     <property name="username" value="root" /> 
     <property name="password" value="PVHmg57bE4" /> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="staffDirectoryDAO" class="org.flinders.staff.directory.dao.impl.StaffDirectoryDAOImpl"> 
     <property name="jdbcTemplate" ref="jdbcTemplate" /> 
    </bean> 

    <bean id="staffDirectoryService" class="org.flinders.staff.directory.services.impl.StaffDirectoryServiceImpl"> 
     <property name="staffDirectoryDAO" ref="staffDirectoryDAO" /> 
    </bean> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" > 
      <value>org.springframework.web.servlet.view.tiles2.TilesView</value> 
     </property> 
    </bean> 

    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/tiles.xml</value> 
      </list> 
     </property> 
    </bean> 
</beans> 

我的控制器類

package org.flinders.staff.directory.controllers; 

import java.util.List; 

import org.flinders.staff.directory.models.database.StaffModel; 
import org.flinders.staff.directory.models.misc.SearchModel; 
import org.flinders.staff.directory.services.StaffDirectoryService; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class StaffDirectoryController { 
    private StaffDirectoryService staffDirectoryService; 

    @RequestMapping("/SearchResults") 
    public void showSearchResults() { 
     //StaffDirectoryService staffDirectoryService = (StaffDirectoryService) getServletContext().getBean("StaffDirectoryService"); 
     List<StaffModel> staffList = staffDirectoryService.viewStaffResults(); 

     for (StaffModel staffModel : staffList) { 

      System.out.println(staffModel.getStaffID() + " : " 

       + staffModel.getFirstname() + " : " + staffModel.getSurname()); 

     } 

     System.out.println(); 

    } 

    @RequestMapping("/SearchForm") 
    public ModelAndView showSearchForm() { 
     return new ModelAndView("search/SearchForm", "SearchModel", new SearchModel()); 
    } 
} 

我不遇到任何發佈/重新啓動我的Tomcat實例。但是在我的瀏覽器中,我的代碼 在我的控制器類中的此代碼(List staffList = staffDirectoryService.viewStaffResults();)上引發異常。

任何想法?謝謝! :)

+2

你得到的例外是什麼? – Isaac

+0

http://pastebin.com/YTFEz0u0 這是我在eclipse中的控制檯上得到的。 – mrjayviper

回答

7

注射使用自動裝配Autowired註解服務對象

第一...進口自動裝配Autowired註解

import org.springframework.beans.factory.annotation.Autowired; 

,並通過注入服務對象註解。

@Autowired 
private StaffDirectoryService staffDirectoryService; 
+0

謝謝你南和里斯。現在工作很好:) – mrjayviper

0

它看起來像你沒有注入StaffDirectoryService,所以它是空的,當你打電話viewStaffResults(),從而投擲NullPointerException

添加@Autowired註釋應該讓你過去的這個:

@Autowired 
private StaffDirectoryService staffDirectoryService; 
+0

我剛剛編輯我的控制器類以包含@Autowired並獲取此錯誤「自動編譯無法解析爲類型」 – mrjayviper

+0

您使用的是哪個版本的Spring?至少2.5? – rees

+0

您是否手動將罐子放入WEB-INF? Spring-core jar是否在你的WEB-INF中? – rees

相關問題