Spring VelocityViewResolver无法解析

时间:2012-10-19 13:45:23

标签: spring spring-mvc velocity

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

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

我已将spring 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"/>

1 个答案:

答案 0 :(得分:0)

问题解决了, 我没有扫描控制器(上下文:组件扫描),也没有在Spring上下文中连接bean。

为了解决这个问题,我通过弹簧注射添加了它:

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