Spring MVC(5):视图 视图解析
Spring MVC 支持的视图技术
JSP和JSTL
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/views/"
p:suffix=".jsp" />
path | 用属性路径表示的表单对象属性; |
htmlEscape | 绑定的表单属性值是是否要对 HTML 特殊字符进行转换,默认值为 true; |
cssClass | 表单组件对应的CSS样式类名 |
cssErrorClass | 当表单组件的数据存在相应的验证错误时,采用的 CSS 样式类 |
cssStyle | 表单组件对应的 CSS 样式串 |
<form:input> | 输入框标签组件,如 <form:input path="userName" /> |
<form:password> | 密码框输入组件,如 <form:passowrd path="password" /> |
<form:hidden> | 隐藏框组件,如 <form:input path="userId" /> |
<form:textarea> | 多行输入框组件,如 <form:textarea path="userNote" rows="3" cols="20" /> |
<form:radiobutton> |
单选框组件,当表单的对应属性和value值相同时,该单选框被选中,如: <form:radiobutton path="sex" value="0" label="男"/> <form:radiobutton path="sex" value="1" label="女"/> 当表单对象sex=0,第一个单选框被选中; |
<form:raidobuttons> |
单选框组件组,用于构造多个的单选框,如下: <form:radiobuttons path="sex" items="${sexOptions}" delimiter="<br/>" /> sexOptions 可以在jsp中定义,该对象可以是一个List,String[],或Map,用于产生和该变量元素相同的单选框组件; 默认情况下,如果 sexOptions 为 List / String[] ,单选框的 value 和 label 相同; 如果 sexOptions 为 Map 类型,单选框的 value 为 Map 的 key,label 为 Map 的 value; 也可以通过 itemValue,itemLabel 来更改以上Map这个行为: |
<form:checkbox> |
复选框组件,如: <form:checkbox path="like" value="1" /> <form:checkbox path="like" value="2" /> 一般来说,like |
<form:checkboxs> |
复选框组件组,用于够着多个复选框,如下: <form:checkboxs path="like" items="${likeOptions}" delimeter="<br/>"> 用法类似于<form:raidobuttons> |
<form:select> |
下拉框组件,如: <form:select path="city" items="${citys}"> <form:option value="" label="--请选择--"> <form:options items="${cityMap}" itemValue="key" itemLabel="value" /> </form:select> 用法类似于<form:raidobuttons> |
<form:errors> |
显示表单错误校验信息,如: <form:errors path="userName"/> 表示“userName”属性的错误 <form:errors path="*/"> 表示绑定对象所有属性错误 <form:errors path="user*"> 表示所有“user”前缀的属性的错误 |
<jsp:useBean id="user" class="site.assad.domain.User" scope="request" />
<form:form action="/user/handleRegister" method="post" modelAttribute="user">
用户名:<form:input path="userName" /><br/>
<form:errors path="userName" cssClass="error"/><br />
密码:<form:input path="password" /><br/>
<form:errors path="password"/><br />
Email:<form:input path="email" cssClass="error" /><br/>
<form:errors path="email"/><br />
生日(格式"yyyy-MM-dd"):<form:input path="birthday" /><br/>
<form:errors path="birthday" cssClass="error"/><br />
<input type="submit" value="提交" />
<input type="reset" value="重置" /><br/>
</form:form>
模板视图 FreeMarker,Velocity
<html>
<head>
<title>User Lists</title>
</head>
<body>
<#list userList as user>
<p>user id:${user.userId}</p>
<p>user name:${user.userName}</p>
<p>user password:${user.password}</p>
<p>user birthday:${user.birthday?string("yyyy-MM-dd")}</p>
<br/>
</#list>
</body>
</html>
package site.assad.web;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//转发到 FreeMarker 模板视图
@RequestMapping("/showUserListByFtl")
public ModelAndView showUserListByFtl(){
List<User> userList = userService.getAllUser();
return new ModelAndView("/user/ftl/userListFtl","userList",userList);
}
}
<!--配置FreeMarker基础设施-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"
p:templateLoaderPath="/WEB-INF/views"
p:defaultEncoding="UTF-8">
<property name="freemarkerSettings">
<props>
<prop key="classic_compatible">true</prop>
</props>
</property>
</bean>
<!--配置FreeMarker解析器-->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
p:order="5"
p:suffix=".ftl"
p:contentType="text/html;charset=utf-8"
/>
输出XML
<bean id="xmlMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="streamDriver">
<bean class="com.thoughtworks.xstream.io.xml.StaxDriver" />
</property>
<property name="annotatedClasses">
<list>
<value>site.assad.domain.User</value>
</list>
</property>
</bean>
<bean id="userListXML" class="org.springframework.web.servlet.view.xml.MarshallingView"
p:modelKey="userList"
p:marshaller-ref="xmlMarshaller"
/>
package site.assad.web;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//转发到 XML 视图
@RequestMapping("/showUserListByXML")
public ModelAndView showUserListByXML(){
List<User> userList = userService.getAllUser();
return new ModelAndView("userListXML");
}
}
输出JSON
<bean id="userListJSON" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"
p:modelKey="userList"
/>
package site.assad.web;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//转发到 JSON 视图
@RequestMapping("/showUserListByJSON")
public ModelAndView showUserListByJSON(){
List<User> userList = userService.getAllUser();
return new ModelAndView("userListJSON");
}
}
输出Excel
package site.assad.web;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import site.assad.domain.User;
public class UserListExcelView extends AbstractExcelView {
@Override
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
//excel 文件编码必须为“iso8859-1“,否则会出现乱码
response.setHeader("Content-Disposition","inline;filename=" + new String("用户列表".getBytes(),"iso8859-1"));
List<User> userList = (List<User>) model.get("userList");
//创建excel表格
HSSFSheet sheet = workbook.createSheet("users");
//创建行首
HSSFRow header = sheet.createRow(0);
header.createCell(0).setCellValue("账号");
header.createCell(1).setCellValue("用户名");
header.createCell(2).setCellValue("生日");
//填充模型
int rowNum = 1;
for(User user : userList){
HSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(user.getUserId());
row.createCell(1).setCellValue(user.getUserName());
row.createCell(2).setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(user.getBirthday()));
}
}
}
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="10" />
<bean id="userListExcel" class="site.assad.web.UserListExcelView" />
//转发到 Excel 视图
@RequestMapping("/showUserListByExcel")
public ModelAndView showUserListByExcel(){
List<User> userList = userService.getAllUser();
return new ModelAndView("userListExcel");
}
输出PDF
package site.assad.web;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import org.springframework.web.servlet.view.document.AbstractPdfView;
import com.lowagie.text.pdf.PdfWriter;
import site.assad.domain.User;
public class UserListPDFView extends AbstractPdfView{
@Override
protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setHeader("Content-Disposition","inline;filename=" + new String("用户列表".getBytes(),"iso8859-1"));
List<User> userList =(List<User>) model.get("userList");
//创建表格,并设置表格格式
Table table = new Table(3);
table.setWidth(80); //设置表格宽度
table.setBorder(1); //设置表格边框
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER); //设置对齐格式
table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
//设置中文字体
BaseFont cnBaseFont = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",false);
Font cnFont = new Font(cnBaseFont,10,Font.NORMAL, Color.BLUE);
//填充表头,中文字符需要使用转换器构造Cell,否则会产生乱码
table.addCell(buildFontCell("账号",cnFont));
table.addCell(buildFontCell("名称",cnFont));
table.addCell(buildFontCell("生日",cnFont));
//填充表格数据
for(User user : userList){
table.addCell(user.getUserId()+""); //英文字符直接添加
table.addCell(buildFontCell(user.getUserName(),cnFont));
table.addCell(new SimpleDateFormat("yyyy-MM-dd").format(user.getBirthday()));
}
}
private Cell buildFontCell(String content,Font font) throws RuntimeException{
try {
return new Cell(new Phrase(content,font));
} catch (BadElementException e) {
throw new RuntimeException(e);
}
}
}
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="10" />
<bean id="userListPDF" class="site.assad.web.UserListPDFView" />>
//转发到 PDF 视图
@RequestMapping("/showUserListByPDF")
public ModelAndView showUserListByPDF(){
List<User> userList = userService.getAllUser();
return new ModelAndView("userListPDF");
}
混合多种视图技术
//使用同一URL获取不同格式的返回内容
@RequestMapping("/showUserListMix")
public ModelAndView showUserListMix(){
List<User> userList = userService.getAllUser();
return new ModelAndView("userListMix");
}
<!--配置 ContentNegontiatingVieqResolver -->
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"
p:ignoreAcceptHeader="true"
p:favorPathExtension="false"
p:favorParameter="true"
p:parameterName="format"
p:defaultContentType="text/html" >
<!--不支持 Accept 报文头指定的 MIME 类型,仅通过请求参数指定 MIME 类型,参数名为content,以下为请求参数列表-->
<property name="mediaTypes">
<value>
html=text/html
xml=application/xml
json=application/json
</value>
</property>
</bean>
<!--配置混合视图解析器,并设置为最高优先级-->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"
p:order="0"
p:contentNegotiationManager-ref="contentNegotiationManager" >
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"
p:modelKey="userList" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView"
p:modelKey="userList" p:marshaller-ref="xmlMarshaller" />
</list>
</property>
</bean>
<!--配置jsp,xml,json 解析器,略,可以通过设置order属性来设定优先级-->
.......
Spring MVC(5):视图 视图解析相关推荐
- Spring MVC中的视图解析ViewResolver
http://blog.csdn.net/prince2270/article/details/5891085 在Spring MVC中,当Controller将请求处理结果放入到ModelAndVi ...
- [Spring MVC] - JSP + Freemarker视图解释器整合(转)
Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --><bean class="org.springframework.we ...
- [Spring MVC] - JSP + Freemarker视图解释器整合
Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --><bean class="org.springframework.we ...
- Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图
首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...
- spring mvc框架请求注解解析,内部资源视图解析器
请看spring DispatcherServlet入门 目录 1. RequestMapping 2. InternalResourceViewResolver 1. RequestMapping ...
- Spring MVC视图解析器
Spring 视图解析器是 Spring MVC 中的重要组成部分,用户可以在配置文件中定义 Spring MVC 的一个视图解析器(ViewResolver),示例代码如下: <bean cl ...
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...
- Spring MVC Controller 的同一个 URL 请求,根据逻辑判断返回 JSON 或者 HTML 视图
为什么80%的码农都做不了架构师?>>> 需求 有这样一个需求,用户注册时,对于浏览器终端和非浏览器终端发起的 HTTP 请求,都走同一个 URL:/user/register ...
- 阿里P7工作总结:Spring MVC的工作原理,看完受益匪浅
这篇文章将深入探讨Spring框架的一部分--Spring Web MVC的强大功能及其内部工作原理. 项目安装 在本文中,我们将使用最新.最好的Spring Framework 5.我们将重点介绍S ...
最新文章
- hdu 6205 card card card 尺取+超神读入挂
- 对话 | 不能与人类直接对话的智能硬件都是“伪”智能
- Python的设计目标
- Python回顾与整理12:执行环境
- (实验学习)MATLAB与C/C++混合编程之MATLAB调用C程序,转载的
- mysql-proxy读写分离
- 推荐系统之业务架构总览
- 原始需求的来龙去脉和核心要求
- 什么是SAP CRM里的Sales Bundle?
- HDU 3652 B-number (数位DP)
- 学习pytorch: 数据加载和处理
- mysql不识别生僻字_mysql生僻字插入失败解决方案
- 解决Eclipse出现的Failure to transfer ... jar问题
- 开涛传–记京东“首席”架构师张开涛
- web留言板整蛊网站愚人节
- 最强大脑记忆曲线(7)——“复习页面”逻辑实现
- java实现中文数字与阿拉伯数字互相转换
- 计算机excel四舍五入,如何在Excel中设置四舍五入
- 国内AR智能眼镜发展难点分析
- C专家编程--随记(一)