概述
起初的目的是想在配置了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
最后
以上就是体贴银耳汤为你收集整理的spring MVC多视图配置的全部内容,希望文章能够帮你解决spring MVC多视图配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复