如何在Spring MVC中集成多种视图技术

时间:2014-07-28 11:32:50

标签: java spring jsp spring-mvc velocity

是否可以在Spring MVC中使用两种视图技术。

让我们说我想要一个JSP和Velocity,

在我的dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <property name="basename" value="spring-views"/>
</bean>

在我的spring-views.properties

item-list.(class)=org.springframework.web.servlet.view.JstlView
item-list.url=/WEB-INF/pages/add-item.jsp

image-list.(class)=org.springframework.web.servlet.view.velocity.VelocityView
image-list.url=/WEB-INF/velocity/image-list.vm
image-list.exposeSpringMacroHelpers=true

我一整天都在搜索,但找不到任何答案。任何帮助表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

将Velocity配置添加到您的调度程序servlet:

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

答案 1 :(得分:0)

您可以根据需要在应用程序中使用尽可能多的视图技术,前提是您已为每个视图解析器配置了视图解析器,并且它们之间没有冲突(就其而言应该选择控制器返回的视图)。 Here是完整XML配置和实际视图的绝佳示例。

答案 2 :(得分:0)

以下是使用速度视图解析器和内部视图解析器的示例。另外,我已经派生出弹簧VelocityLayoutView以便能够在2.0版本中使用速度工具。速度旋转变压器的顺序为10,内部的顺序为20,使速度旋转变压器有机会在内部旋转变压器解决之前解析其视图。对于速度视图,输出被强制为UTF-8。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="viewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" p:order="20">
</bean>

<bean class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"
      id="vmViewResolver" p:order="10" p:suffix=".vm" p:prefix=""
      p:cache="true" p:contentType="text/html;charset=UTF-8"
      p:exposeRequestAttributes="false" p:exposeSessionAttributes="false"
      p:exposePathVariables="true" p:exposeSpringMacroHelpers="true"
      p:dateToolAttribute="date" p:toolboxConfigLocation="/WEB-INF/toolbox.xml"
      p:viewClass="org.sba.views.Velocity2LayoutView">
    <property name="attributesMap">
        <map>
            <entry key="messageSource" value-ref="messageSource"/>
        </map>
    </property>
</bean>

这是修改后的VelocityView:

public class Velocity2LayoutView extends VelocityLayoutView {
    ViewToolManager toolManager;

    @Override
    protected Context createVelocityContext(Map<String, Object> model,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        ViewToolContext context = toolManager.createContext(request, response);
        context.putAll(model);
        return context;
    }

    @Override
    protected void initTool(Object tool, Context velocityContext) throws Exception {
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        toolManager = new ViewToolManager(getServletContext(), false, false);
        if (getToolboxConfigLocation() != null) {
            XmlFactoryConfiguration config = new XmlFactoryConfiguration();
            config.read(getServletContext()
                    .getResourceAsStream(getToolboxConfigLocation()));
            toolManager.configure(config);
        }
        toolManager.setVelocityEngine(getVelocityEngine());
    }
}