![](/img/trans.png)
[英]Is there a more improved declarative view technology than JSTL with Spring MVC
[英]How to integrate many view technology in Spring MVC
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
我已經搜尋了一整天,找不到任何答案。 任何幫助表示贊賞。 謝謝!
將Velocity配置添加到調度程序servlet:
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
</bean>
您可以根據需要在應用程序中使用盡可能多的視圖技術,只要已為每種視圖配置了視圖解析器,並且它們之間沒有沖突(就應該選擇控制器返回的視圖而言)。 這是一個具有完整XML配置和實際視圖的出色示例。
這是同時使用速度視圖解析器和內部視圖解析器的示例。 另外,我派生了Spring 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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.