﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-追求无止境-随笔分类-Java EE</title><link>http://www.blogjava.net/wangajing/category/42758.html</link><description>我的程序人生</description><language>zh-cn</language><lastBuildDate>Sat, 28 Nov 2009 05:02:39 GMT</lastBuildDate><pubDate>Sat, 28 Nov 2009 05:02:39 GMT</pubDate><ttl>60</ttl><item><title>Spring web MVC 框架学习笔记 之 ViewResolver技术</title><link>http://www.blogjava.net/wangajing/archive/2009/11/27/303880.html</link><dc:creator>追求无止境</dc:creator><author>追求无止境</author><pubDate>Fri, 27 Nov 2009 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/wangajing/archive/2009/11/27/303880.html</guid><wfw:comment>http://www.blogjava.net/wangajing/comments/303880.html</wfw:comment><comments>http://www.blogjava.net/wangajing/archive/2009/11/27/303880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangajing/comments/commentRss/303880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangajing/services/trackbacks/303880.html</trackback:ping><description><![CDATA[<p>上次的文章中介绍了ModelAndView对象中的view对象，可以使用字符串来让Spring框架进行解析获得适合的视图。而解析View的就是ViewResolver技术。</p>
<p>ViewResolver的定义如下：</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">interface</span> ViewResolver {<br />
View resolveViewName(String viewName, Locale locale) throws Exception;<br />
}</pre>
<pre class="csharpcode">&nbsp;</pre>
<pre class="csharpcode">在[spring-dispatcher-name]-servlet.xml中，可以定义viewResolver：</pre>
<p>&lt;bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;property name="prefix" value="/jsp/"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property
name="suffix" value=".jsp"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;
</p>
<p><font face="Consolas" size="3">来让DispacherServlet进行加载默认的viewResolver，如果没有设置viewResolver，spring使用InternalResourceViewResolver进行解析。</font></p>
<p><font face="Consolas" size="3">Spring实现ViewResolver的非抽象类且我们经常使用的viewResolver有以下四种：</font></p>
<table unselectable="on" border="2" cellpadding="2" cellspacing="1" width="700">
    <tbody>
        <tr>
            <td valign="top" width="350">InternalResourceViewResolver</td>
            <td valign="top" width="350">将逻辑视图名字解析为一个路径</td>
        </tr>
        <tr>
            <td valign="top" width="350">BeanNameViewResolver</td>
            <td valign="top" width="350">将逻辑视图名字解析为bean的Name属性，从而根据name属性，找定义View的bean</td>
        </tr>
        <tr>
            <td valign="top" width="350">ResourceBundleResolver</td>
            <td valign="top" width="350">和BeanNameViewResolver一样，只不过定义的view-bean都在一个properties文件中，用这个类进行加载这个properties文件</td>
        </tr>
        <tr>
            <td valign="top" width="350">XmlViewResolver</td>
            <td valign="top" width="350">和ResourceBundleResolver一样，只不过定义的view-bean在一个xml文件中，用这个类来加载xml文件</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>使用多视图解析器：</p>
<p>我们不想只使用一种视图解析器的话，可以在[spring-dispatcher-name]-servlet.xml定义多个viewResolver：</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode">&lt;bean id=<span class="str">"viewResolver"</span> <span class="kwrd">class</span>=<span class="str">"org.springframework.web.servlet.view.InternalResourceViewResolver"</span>&gt;<br />
&lt;property name=<span class="str">"prefix"</span> value=<span class="str">"/jsp/"</span>/&gt;<br />
&lt;property name=<span class="str">"suffix"</span> value=<span class="str">".jsp"</span>/&gt;<br />
&lt;/bean&gt;<br />
<br />
&lt;bean id=&#8221;beanNameViewResolver&#8221; <span class="kwrd">class</span>=&#8221;...BeanNameViewResolver&#8221;&gt;<br />
&lt;property name=<span class="str">"order"</span> value=<span class="str">"1"</span>&gt;&lt;/property&gt;<br />
&lt;/bean&gt;<br />
<br />
&lt;bean id=&#8221;beanNameViewResolver&#8221; <span class="kwrd">class</span>=&#8221;...XmlViewResolver&#8221;&gt;<br />
&lt;property name=<span class="str">"order"</span> value=<span class="str">"0"</span>&gt;&lt;/property&gt;<br />
&lt;/bean&gt;</pre>
<br />
</div>
<p>DispatcherServlet会加载所有的viewResolver到一个list中，并按照优先级进行解析。注意order中的值越小，优先级越高。而id为viewResolver</p>
<p>的viewResolver的优先级是最低的。</p>
<img src ="http://www.blogjava.net/wangajing/aggbug/303880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangajing/" target="_blank">追求无止境</a> 2009-11-27 12:11 <a href="http://www.blogjava.net/wangajing/archive/2009/11/27/303880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>