无聊贴一个Spring multiple view resolver

本文介绍了一种名为MultipleViewResolver的自定义视图解析器,该解析器支持多种视图技术,如JSP和FreeMarker,并能根据视图名称的扩展名选择合适的解析方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

package org.dy.ext.spring.web;

import java.util.Locale;
import java.util.Map;

import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.UrlBasedViewResolver;

public class MultipleViewResolver extends UrlBasedViewResolver {

	private Map<String, ViewResolver> resolvers;
	
	@Override
	protected View loadView(String viewName, Locale locale) throws Exception {
		// TODO Auto-generated method stub
		return internalResolveViewName(viewName, locale);
	}

	public View internalResolveViewName(String viewName, Locale locale)
			throws Exception {
		// 获得扩展名
		int n = viewName.lastIndexOf(".");
		if (n == -1)
			return null;
		String suffix = viewName.substring(n + 1);

		String resolverViewKey = "";
		// 查找 eg. zftl,ftl = oneResolver => ftl = oneResolver
		for (String key : resolvers.keySet()) {
			String[] arr = key.split(",");
			for (String subViewName : arr) {
				if (subViewName.equals(suffix)) {
					resolverViewKey = key;
					break;
				}
			}
		}

		// 取出对应的ViewResolver:
		ViewResolver resolver = resolvers.get(resolverViewKey);
		if (resolver != null)
			return resolver.resolveViewName(viewName, locale);

		// 没有找到对应的ViewResolver就抛异常
		return null;
	}

	public Map<String, ViewResolver> getResolvers() {
		return resolvers;
	}

	public void setResolvers(Map<String, ViewResolver> resolvers) {
		this.resolvers = resolvers;
	}

}
 

 

<bean id="viewResolver"
		class="org.dy.ext.spring.web.MultipleViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="resolvers">
			<map>
				<entry key="jsp">
					<bean
						class="org.springframework.web.servlet.view.InternalResourceViewResolver">
						<property name="viewClass"
							value="org.springframework.web.servlet.view.JstlView" />
						<property name="prefix" value="/WEB-INF/jsp/" />
					</bean>
				</entry>
				<!-- 其中的js/css表示当需要freemarker动态生成js/css文件 -->
				<entry key="ftl,zftl,js,css">
					<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
						<property name="cache">
							<value>true</value>
						</property>
						<property name="viewClass">
							<value>
								org.springframework.web.servlet.view.freemarker.FreeMarkerView
							</value>
						</property>
						<property name="contentType">
							<value>text/html;charset=utf-8</value>
						</property>
						<property name="exposeSpringMacroHelpers">
							<value>true</value>
						</property>
					</bean>
				</entry>
			</map>
		</property>
	</bean>
							
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值