基于BeanNameViewResolver解析器,自定义视图
概述
基于spring-mvc自定义视图,以BeanNameViewResolver作为解析器,以满足特殊需求。
本文以输出多个pdf文件的压缩文件,供前台下载的需求为例;但是不提供服务层实现。
实现
创建AbstractView的实现类
package cn.sinobest.jzpt.zfba.fzyw.xzfy.dfcl.view;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView;
import cn.sinobest.jzpt.zfba.fzyw.xzfy.dfcl.domain.DFCL;
import cn.sinobest.jzpt.zfba.fzyw.xzfy.dfcl.service.IZipService;
@Component("dfclView")
public class DFCLView extends AbstractView {
@Resource(name = "fzyw.xzfy.service.zip")
private IZipService zipService;
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/* 1. 设置响应内容类型 */
response.setContentType("Application/Octet-stream;charset=utf-8");
/* 2. 将文件名加入响应头 */
String zipName = "材料压缩包" + System.currentTimeMillis() + ".zip";
zipName = new String(zipName.getBytes(), "ISO-8859-1");
response.addHeader("Content-Disposition", "attachment; filename="
+ zipName);
/* 3. 输出文件内容 */
@SuppressWarnings("unchecked")
List<DFCL> dfclList = (List<DFCL>) model.get("dfclList");
zipService.write(response.getOutputStream(), dfclList);
/* 4. 关闭流 */
response.getOutputStream().flush();
response.getOutputStream().close();
}
}
说明:
注解Component用于声明spring的bean
在Controller中返回视图bean的名称
private static final String VIEW_DEFAULT = "dfclView";
@RequestMapping("/download")
public String download(Model model, String writids) {
List<DFCL> dfclList = dfclService.getDFCL(writids);
model.addAttribute("dfclList", dfclList);
return VIEW_DEFAULT;
}
更多内容
注:下面的介绍多以项目框架中的配置为基础,具体实现类的代码不便贴出,权作参考。
在spring-mvc中,controller返回的名称需要经过视图解析器的解析,解析器找到对应的视图,并调用对应的方法。
在项目中,一般在Controller的方法返回jsp的相对路径,即能在前台得到对应的内容,是因为webmvc-config.xml中存在下述的配置:
<bean class="cn.sinobest.jzpt.framework.mvc.localization.ExtInternalResourceViewResolver">
<!--bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"-->
<property name="prefix" value=""/>
<property name="suffix" value=""/>
</bean>
而详表配置文件,通常是在jsp返回后根据form的formdata属性异步请求的,对应的controller方法返回"xmlView";前台可以得到对应的xml,并渲染视图,是因为webmvc-config.xml中存在下述的配置:
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>BeanNameViewResolver解析器试图将返回的名称当作视图bean的name,而webmvc-config.xml中又配置了"xmlView"的视图:
<bean name="xmlView" class="cn.sinobest.jzpt.framework.mvc.legacysystemsmac.xml.LegacySystemsXMLView">
<property name="xmlTransformer">
<bean class="cn.sinobest.jzpt.framework.mvc.legacysystemsmac.xml.LegacySystemsXMLTransformer"/>
</property>
</bean>具体研究详表配置文件的返回,就要看LegacySystemsXMLView和LegacySystemsXMLTransformer的源代码了。
当需要返回json的时候,controller方法一般返回"jsonView",是因为webmvc-config.xml中存在了BeanNameViewResolver的配置,还有"jsonView"的配置:
<bean name="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
<property name="encoding">
<value type="org.codehaus.jackson.JsonEncoding">UTF8</value>
</property>
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
spring提供了一套View和ViewResolver的继承体系
参考spring自定义视图可以获取更多的内容。
基于BeanNameViewResolver解析器,自定义视图的更多相关文章
- SpringMVC系列(七)视图解析器和视图
在springmvc.xml里面配置视图解析器 <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org ...
- Spring 梳理 - 视图解析器 VS 视图(View,ViewResolver)
View View接口表示一个响应给用户的视图,例如jsp文件,pdf文件,html文件等 该接口只有两个方法定义,分别表明该视图的ContentType和如何被渲染 Spring中提供了丰富的视图支 ...
- SpringMVC 视图和视图解析器&表单标签
视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它 ...
- SpringMVC 视图解析器
SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...
- SpringMVC源码阅读:视图解析器
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- SpringMVC——视图和视图解析器
请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...
- springmvc自定义视图
自定义视图 可以整合jfreechart.excel @RequestMapping("/testView") public String testView(){ System.o ...
- SpringMvc配置自定义视图
1.在dispatcherServlet-servlet.xml配置自定义视图 <!-- 配置视图 BeanNameViewResolver 解析器: 使用视图的名字来解析视图 --> & ...
- Spring MVC 自定义视图
实现View import org.springframework.stereotype.Component; import org.springframework.web.servlet.View; ...
随机推荐
- [USACO Mar08] 牛跑步
http://www.cogs.pro/cogs/problem/problem.php?pid=133 ★★★ 输入文件:cowjog.in 输出文件:cowjog.out 简单对比时间 ...
- HDU 4609 FFT模板
http://acm.hdu.edu.cn/showproblem.php?pid=4609 题意:给你n个数,问任意取三边能够,构成三角形的概率为多少. 思路:使用FFT对所有长度的个数进行卷积(\ ...
- java -classpath or -cp 的设置和解释
classpath is a parameter—set either on the command-line, or through an environment variable—that tel ...
- [cerc2012][Gym100624D]20181013
题意:一个序列,如果存在一个连续子序列,满足该子序列中没有只存在一次的序列,则原序列为boring,否则non-boring 题解: 分治递归 对一个序列,如果找到了一个只出现一次的数位于a[x],则 ...
- 51nod1245 Binomial Coefficients Revenge
题目来源: HackerRank 基准时间限制:2 秒 空间限制:131072 KB 分值: 640 C(M,N) = M! / N! / (M - N)! (组合数).给出M和质数p,求C(M,0 ...
- 【BZOJ】1774: [Usaco2009 Dec]Toll 过路费
[题意]给定无向图,距离定义为边权和+最大点权,询问若干个两点最短距离.n<=250. [算法]排序+floyd [题解]考虑floyd的过程是每次找一个中转点,为了在当前找到一条新路径时方便地 ...
- [IOS]Xcode各版本官方下载及百度云盘下载, Mac和IOS及Xcode版本历史
官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ 百度云盘下载地址 http:// ...
- 集合框架源码学习之LinkedList
0-1. 简介 0-2. 内部结构分析 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. 添加add方法 0-3-3. 根据位置取数据的方法 0-3-4. 根据对象得到索引 ...
- VMWare虚拟机NAT模式静态IP联网配置
1.网络连接 vmnet8右键属性ipv4,设置ip为192.168.10.100.如下图: 2.设置虚拟机的网络适配器采用NAT模式 3.vmware工具栏的编辑->虚拟网络编辑器 ...
- java===java基础学习(15)---抽象,接口
抽象 //这就是一个抽象类 abstract class Animal { String name; int age; abstract public void cry(); } //当一个类继承的父 ...