是否可以在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
我一整天都在搜索,但找不到任何答案。任何帮助表示赞赏。谢谢!
答案 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());
}
}