BeanNameViewResolver类简介说明

本文详细介绍了Spring MVC中BeanNameViewResolver的作用,它用于将逻辑视图名与Spring容器中的bean匹配,实现视图解析。通过配置示例,展示了如何创建一个ExcelView来生成Excel文件,并通过ViewController控制器导出数据。同时,还给出了使用BeanNameViewResolver和InternalResourceViewResolver结合的例子,展示了如何返回自定义视图并解析视图名的过程。

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

转自:

BeanNameViewResolver类简介说明

下文笔者讲述BeanNameViewResolver类的简介说明,如下所示:

BeanNameViewResolver视图解析器同XmlViewResolver相同,
都是使用逻辑视图名称同bean对象进行匹配解析

例:   使用模板生成excel文件

控制器配置control-context.xml

<bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
 <bean id="viewController" class="ViewController">
    <property name="dataModel">
        <ref bean="model-DataModel"/>
    </property>
</bean>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
      <props>
        <prop key="/view/*.report">viewController</prop>
    </props>
  </property>
</bean>

Excel视图ExcelView.java

public class ExcelView extends AbstractExcelView {
    protected void buildExcelDocument(Map model,
            HSSFWorkbook wb, HttpServletRequest request, HttpServletResponse reqponse)
            throws Exception {
        
        //...
         Object[] datas = (Object[]) model.get("data");
        //...        
        
        HSSFSheet sheet;
        //get the sheet 1 in template
        sheet = wb.getSheetAt(0);
        //handle this sheet
        //...
    }
}

实现 org.springframework.web.servlet.view.document.AbstractExcelView 类中的 buildExcelDocument方法。

3. ViewController控制器 ViewController.java
public class ViewController extends MultiActionController {
    private DataModel dataModel;
    public void setDataModel(DataModel dataModel){
        this.dataModel = dataModel;
    }
    
    public ModelAndView exportToExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map model=new HashMap();
        Object[] datas;
        datas = dataModel.getDatas.toArray();
        model.put("data", datas);
        ExcelView excelView = new ExcelView();
        excelView.setApplicationContext(this.getWebApplicationContext());
        excelView.setUrl("/WEB-INF/Template");
        
        return new ModelAndView(excelView,model);
    }
}

4. 配置web.xml
<servlet>
   <servlet-name>viewController</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/config/control-context.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>viewController</servlet-name>
   <url-pattern>*.report</url-pattern>
</servlet-mapping>

5. 运行http://hostname/view/exportToExcel.report

例2: TestView

1.在SpringMVC配置文件中添加BeanNameViewResolver

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">  
    <property name="order" value="10" />  
</bean>     
<!-- 配置视图解析器 -->
<!--该视图解析器的order值为Integer.MAX_VALUE -->  
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="prefix" value="/WEB-INF/"></property>  
    <property name="suffix" value=".jsp"></property>  
</bean>

2.创建一个TestView类,实现View接口

import java.util.Date;  
import java.util.Map;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.springframework.stereotype.Component;  
import org.springframework.web.servlet.View;  

@Component  
public class TestView implements View{  
    public String getContentType() {  
        // TODO Auto-generated method stub  
        return "text/html";  
    }  
    public void render(Map model, HttpServletRequest request,  
            HttpServletResponse response) throws Exception {  
        // TODO Auto-generated method stub  
        response.getWriter().print("Welcome to View:"+new Date());   
    }  
}

3.创建控制器
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
  
@RequestMapping(value="/springmvc")  
@Controller  
public class MyView {  
    @RequestMapping(value="/testMyView")  
    public String testView(){  
        System.out.println("testView");  
        return "helloView";
    }  
}

此时return的是视图名的第一个字母小写
springmvc会根据这个helloView名,去getBean,得到这个视图对象
选项 C 中的描述是错误的。 Spring MVC 视图解析器主要用于将逻辑视图名解析为具体的视图实现,以便渲染视图并返回给客户端。关于 Spring MVC 视图解析器的描述: A. BeanNameViewResolver 将视图名解析为一个 bean,视图名是 bean 的 id:BeanNameViewResolver 可以将视图名解析为一个已注册的 Bean,视图名就是该 Bean 的名称。 B. ResourceBundleViewResolver 可以利用该为不同本地化型提供不同的解析结果:ResourceBundleViewResolver 可以根据不同本地化型(如语言、国家等)提供不同的视图解析结果,以便实现多语言支持。 C. InternalResourceViewResolver 通过该配置前缀和后缀,然后解析为一个 URL 文件,它的父是 UrlBasedViewResolver:InternalResourceViewResolver 可以通过配置前缀和后缀来解析视图名,并将其解析为一个 URL 文件。它的父是 UrlBasedViewResolver,而不是 ActionBasedViewResolver。 D. XmlViewResolver 还实现了 Ordered 接口,因此我们可以通过其 order 属性来指定在 ViewResolver 链中它所处的位置,order 的值越小优先级越高:XmlViewResolver 可以读取 XML 文件中的视图配置信息,并将其解析为具体的视图实现。它实现了 Ordered 接口,可以通过 order 属性来指定在 ViewResolver 链中的位置,order 值越小优先级越高。 因此,选项 C 中的描述是错误的,其他选项的描述都是正确的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值