spring MVC多视图配置

        起初的目的是想在配置了InternalResourceViewResolver默认到web-info/views下的情况下,能不能让后台跳出web-info/views这个目录去webContent这个目录下去找页面呢,于是接触到了spirng视图解析器,最后找到了可以通过实现ViewResolver这个借口来进行视图的分发处理。

        原理是在实现ViewResolver这个借口的前提下,在spring中配置这个类,然后在这个类中去截获springmvc中所返回的字符串,并在返回的字符串中做特俗处理,比如你要返回的这个页面是在web-info/views下,你就返回hello_views,这样在resolveViewName这个接口方法中去对截取到的字符串进行处理,如果发现已views这个结尾的,就让接下来的解析去去找相对应的视图解析器,这样基本就完成了。下面是具体实现

      spring的具体配置文件如下

<bean id="viewResolver" class="com.spring.action.MultiViewResover">
		<property name="resolvers">
			<map>
				<entry key="views">
					<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/"/>
						<property name="suffix" value=".jsp"/>
					</bean>
				</entry>
				<entry key="webapp">
					<bean
							class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
						<property name="cache" value="true"/>
						<property name="prefix" value="/"/>
						<property name="suffix" value=".jsp"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>


以下是多视图解析类

package com.spring.action; 
 
import java.util.Locale; 
import java.util.Map; 
import org.springframework.web.servlet.View; 
import org.springframework.web.servlet.ViewResolver; 
 
/**
 * @author Jeson
 * @blog :http://www.gbsou.com
 * @date:Oct 20, 2009 8:39:27 AM
 * @version :1.0
 * 
 */ 
public class MultiViewResover implements ViewResolver { 
 
    private Map<String, ViewResolver> resolvers; 
 
    @Override 
    public View resolveViewName(String viewName, Locale locale) 
            throws Exception { 
        int n = viewName.lastIndexOf("_"); // 获取 
                                            // viewName(modelAndView中的名字)看其有没有下划线 
        if (n == (-1)) 
            return null; // 没有则直接返回空 
        // 有的话截取下划线后面的字符串 这里是自定义的views、webapp与配置文件中的<entry key="views">的key一致 
        String suffix = viewName.substring(n + 1); 
        // 根据下划线后面的字符串去获取托管的视图解析类对象 
        ViewResolver resolver = resolvers.get(suffix); 
 
        // 取下划线前面的部分 那时真正的资源名.比如我们要使用web-info/views/目录下的hello.jsp 那viewName就应该是hello_views 
        viewName = viewName.substring(0, n); 
        if (resolver != null) 
            return resolver.resolveViewName(viewName, locale); 
        return null; 
    } 
 
    public Map<String, ViewResolver> getResolvers() { 
        return resolvers; 
    } 
 
    public void setResolvers(Map<String, ViewResolver> resolvers) { 
        this.resolvers = resolvers; 
    } 
} 

controller层的代码

package com.spring.action; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 
 
@Controller 
public class HelloWorldAction { 
 
    @RequestMapping(value = "/helloworld.do") 
    public ModelAndView hello() { 
        ModelAndView modelAndView = new ModelAndView(); 
        modelAndView.setViewName("hello_views"); 
        modelAndView.addObject("message", "Hello,SpringMvc"); 
        return modelAndView; 
    } 
 
    @RequestMapping(value = "/welcome.do") 
    public ModelAndView helloVm() { 
        // ModelAndView modelAndView=new ModelAndView(); 
        // modelAndView.setViewName("hello_webapp"); 
        // modelAndView.addObject("message", "Hello,Velocity"); 
        // return modelAndView; 
        Map map = new HashMap(); 
        return new ModelAndView("freemarker_webapp",  map); // 根据之前的解释这里就是去寻找 
                                                            // user.ftl资源 
 
    } 
 
} 


我这里没有进行多视图解析,而是用了多视图解析去解决了我目录跳转的问题,有问题随时留言,欢迎大家一起学习交流!

参考文献http://www.2cto.com/kf/201206/136736.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值