2012-10-19 58 views
0

尝试使用Velocity设置Spring项目时出现以下错误。Spring VelocityViewResolver未解析

PageNotFound - No mapping found for HTTP request with URI [/SpringMVCVelocity/Enquiries/viewAllEnquiries] in DispatcherServlet with name 'mvc-dispatcher' 

我已经设置了春天的context.xml原样

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:webflow="http://www.springframework.org/schema/webflow-config" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/tx 
     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
     http://www.springframework.org/schema/webflow-config 
     http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.3.xsd"> 

    <context:component-scan base-package="ecommerce.dao" />  

    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 
     <property name="resourceLoaderPath" value="/WEB-INF/view/"/> 
    </bean> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> 
     <property name="cache" value="false"/> 
     <property name="prefix" value=""/> 
     <property name="suffix" value=".vm"/> 
     <property name="order" value="-1"/> 
     <property name="exposeSpringMacroHelpers" value="true"></property> 
    </bean> 


    <mvc:annotation-driven/> 

    <!-- Forwards requests to the "/" resource to the "welcome" view --> 
    <mvc:view-controller path="/" view-name="welcome"/> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="ecommerce"/> 
    </bean> 
    <!-- enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <!-- Configures Handler Interceptors --> 
    <mvc:interceptors> 
     <!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de --> 
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
    </mvc:interceptors> 

    <!-- Saves a locale change using a cookie --> 
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> 

    <!-- Application Message Bundle --> 
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="/WEB-INF/messages/messages" /> 
     <property name="cacheSeconds" value="0" /> 
    </bean> 

    <!-- 
     FLOW HANDLING 
    --> 

    <!-- Enables FlowHandler URL mapping --> 
    <bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"> 
     <property name="flowExecutor" ref="flowExecutor" /> 
    </bean> 

    <webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry"/> 

    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> 
     <property name="flowRegistry" ref="flowRegistry" /> 
     <property name="order" value="-1" /> 
    </bean> 

    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
     <webflow:flow-location path="/WEB-INF/view/flows/flow.xml"/> 
    </webflow:flow-registry> 

    <webflow:flow-builder-services id="flowBuilderServices" view-factory-creator="mvcViewFactoryCreator" /> 

    <bean id="mvcViewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator"> 
     <property name="viewResolvers" ref="viewResolver" /> 
    </bean> 

    <!-- 

     Bean Injections 

    --> 
    <bean id="carModelDao" class="ecommerce.dao.CarModelDao"/> 

    <bean id="carController" class="ecommerce.controller.CarController"> 
     <property name="carModelDao" ref="carModelDao"/> 
    </bean> 

    <bean id="veloController" class="ecommerce.controller.VelocityController"> 
     <property name="carModelDao" ref="carModelDao"/> 
    </bean> 
</beans> 

我的控制器:

@Controller 
@RequestMapping("/Enquiries") 
@SessionAttributes({"enqList", "search"}) 

public class EnquiryController { 

    private static final Logger logger = Logger.getLogger(EnquiryController.class); 
    private PagedListHolder<Enquiry> enqList = null; 
    private int pageSize = 10; 

    @Autowired 
    private EnquiryDao enquiryDao; 

    @RequestMapping("/viewAllEnquiries") 
    public String getAllEnquiries(@RequestParam(required=false) String page, Model model) { 

     if ("next".equals(page) && enqList != null) { 
      enqList.nextPage(); 
     } else if ("previous".equals(page) && enqList != null) { 
      enqList.previousPage(); 
     } else { 
      // well there is no page parameter, so it must be a new request 
      enqList = new PagedListHolder<Enquiry>(enquiryDao.getAllEnquiries()); 
      enqList.setPageSize(pageSize); 
     } 
     model.addAttribute("search", new Search()); 
     model.addAttribute("enqList", enqList); 

     return "viewAllEnquiries"; 
    } 

该控制器甚至没有叫。但它确实成功地管理,以解决欢迎看法:

<mvc:view-controller path="/" view-name="welcome"/> 
+0

请添加您的spring配置文件(applicationContext.xml中) –

+0

现在已经完全加入它。 – enkor

+1

mvc-annotation驱动并不会导致spring去搜索注释,这意味着如果有它发现的bean,它会使用它的上下文:component-scan,它会将它们选中。所以确保你的控制器在春季真正被采集。看来你只能扫描你的dao包。 –

回答

0

问题解决了, 我没有扫描控制器(背景:组件扫描),并没有有线豆无论是在Spring上下文。

因此,要解决这个问题,我通过注入春天加入它:

<bean id="enquiryDao" class="ecommerce.dao.EnquiryDao"/> 
<bean id="enquiryController" class="ecommerce.controller.EnquiryController"> 
    <property name="enquiryDao" ref="enquiryDao"/> 
</bean>