SpringMVC视图解析器(1)

ModelAndView对象中的view对象,可以使用字符串来让Spring框架进行解析获得适合的视图。而解析View的就是ViewResolver技术。

ViewResolver的定义如下:

public interface ViewResolver {
 View resolveViewName(String viewName, Locale locale) throws Exception;
 }
 
在[spring-dispatcher-name]-servlet.xml中,可以定义viewResolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

来让DispacherServlet进行加载默认的viewResolver,如果没有设置viewResolver,spring使用InternalResourceViewResolver进行解析。

Spring实现ViewResolver的非抽象类且我们经常使用的viewResolver有以下四种:

InternalResourceViewResolver将逻辑视图名字解析为一个路径
BeanNameViewResolver将逻辑视图名字解析为bean的Name属性,从而根据name属性,找定义View的bean
ResourceBundleResolver和BeanNameViewResolver一样,只不过定义的view-bean都在一个properties文件中,用这个类进行加载这个properties文件
XmlViewResolver和ResourceBundleResolver一样,只不过定义的view-bean在一个xml文件中,用这个类来加载xml文件

 

使用多视图解析器:

我们不想只使用一种视图解析器的话,可以在[spring-dispatcher-name]-servlet.xml定义多个viewResolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/jsp/"/>
 <property name="suffix" value=".jsp"/>
 </bean>
 
 <bean id=”beanNameViewResolver” class=”...BeanNameViewResolver”>
 <property name="order" value="1"></property>
 </bean>
 
 <bean id=”beanNameViewResolver” class=”...XmlViewResolver”>
 <property name="order" value="0"></property>
 </bean>

DispatcherServlet会加载所有的viewResolver到一个list中,并按照优先级进行解析。注意order中的值越小,优先级越高。而id为viewResolver

的viewResolver的优先级是最低的。


一,框架默认情况下是通过转发进行跳转的,如果我们想通过重定向怎么办呢?只需要在控制器类中,将返回的结果对象中传递View视图参数RedirectView对象就是重定向的视图。

View view = new RedirectView("http://www.ljh.com/index.jsp");                

returnnew ModelAndView(view);

 

         或者可以将路径写到配置文件中,或者属性配置文件中,都是可以的。这样我们的控制器类的返回对象ModelAndView的构造方法只需要设置一个字符串参数即可。

 

returnnew ModelAndView("index");

 

配置文件中使用重定向视图解析器进行页面跳转。

  1.         <bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"></bean>  
  2.    
  3.         <!-- bean的id属性值要与控制器的返回对象参数名称一致-->  
  4.          <bean id="index" class="org.springframework.web.servlet.view.RedirectView">  
  5.             <property name="url" value="http://www.ljh.com/index.jsp"></property>  
  6.   
  7. </bean>     

          这样,我们一个配置文件中就可能出现多个视图解析器,怎么判断使用那个呢?我们可以通过设置order来进行选择优先级的设置,<property name="order"value="2"></property> ,需要注意的是,InternalResourceViewResolver优先级应该最低order属性值要比其他的视图解析器的值要大。能够保证所有的映射不被遗忘。而且能够达到我们想要的效果。这是对转发和重定向的学习,其实就是一些新设置,原理和其它都是相同的,我们可以通过查看资料获取更多,例如api,网上资料等。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值