SpringMVC学习(二)
来源:互联网 发布:ajax 数据undefined 编辑:程序博客网 时间:2024/06/11 06:43
##Map
Map,即java.util.Map,在springMVC中起到了至关重要的作用。它是架起视图和Model层的一座桥梁。
在RequestMap标记的任何一个方法,都可以使用Map< String, Object >
作为入参,这个map最终会自动添加到view的请求域中,在view中可以使用${key }或${requestScope.key }将model取出。
注:Map中的key必须是String类型的,因为这个map相当于映射了请求域中的键值对。
下面看一个例子:
@RequestMapping("/emp") public String showEmployee(Map<String, Object> map){ List<Employee> employees = employeeDao.selectAll(); map.put("employees", employees); return "list"; }
在这个路径下,将所有employee取出来放到map中,然后框架会带着这个map进入list.jsp这个view中去。
在list.jsp中引用:
<c:if test="${empty requestScope.employees}"> 没有信息 </c:if> <c:if test="${!empty requestScope.employees }"> <table border="1" cellpadding="10" cellspacing="0"> <tr> <th>ID</th> <th>Name</th> <th>Gender</th> <th>Age</th> <th>Department</th> <th>Edit</th> <th>Delete</th> </tr> <c:forEach var="emp" items="${requestScope.employees }" > <tr> <th>${emp.id}</th> <th>${emp.name}</th> <th>${emp.gender==0?'female':'male'}</th> <th>${emp.age}</th> <th>${emp.department.name}</th> <th><a href="">edit</th> <th><a href="">delete</a></th> </tr> </c:forEach> </table> </c:if>
抛去标签先不说,对于key=employees的这个model来说,取出来的时候就用${requestScope.employees }或者直接使用${ employees}即可。
下面介绍标签语言:
JSTL
jstl-c
jstl可以以标签的形式进行逻辑控制。
使用该标签配合EL表达式可以很方便的实现对model的一些操作。这些操作往往是对model的信息进行遍历显示等等。
在view中使用jstl需要在xml头部引入jstl标准库: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
才能使用上述例子中的操作。
jstl-form
jstl还有很多有用的工具,比如form <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
使用这种form能够非常方便的跟对象映射起来。
正如SpringMVC之一中提到的@ModelAttribute
标签标记过的方法。只不过是,原生的form可以不用ModelAttribute进行“预先映射实体”,仅仅是在有需要的时候进行一下预提取(见SpringMVC之一中@ModelAttribute的例子);但是在jstl中的form,springMVC默认其必须有一个实体进行映射,即在显示表单的时候,表单所对应的实体也必须放在requestScope中或者sessionValue中去。在requestScope的情况,就用到了上述的map。在对应的Controller方法中,将表单实体放入map,然后返回view名称。框架会自动带着map传入到对应的view页面。
view页面包含的这个jstl表单也有一些要求:
参照下面的例子,一一列举:
<form:form action="input" method="POST" modelAttribute="employee"> Name: <form:input path="name" /> <br> Age: <form:input path="age"/> <br> Gender:<form:radiobuttons path="gender" items="${genders}"/> <br> DepartmentName:<form:select path="department.id" items="${departments}" itemLabel="name" itemValue="id"/> <br> <input type="submit" value="Submit"/> </form:form>
- action:对应着控制层路径;modelAttribute对应着表单的映射实体,它的值就是map中那个实体的key。如果不写modelAttribute,在默认情况下的值为“command”,也就是说如果map中没有加入“command”为key的映射对象,后台在提交表单的时候会报错:无法找到‘command’对应的参数。
- < form:input path=”xxx” /> 中的path,相当于原生form的name属性。在使用path的值时,一定要对应着实体类的变量名称,如
<form:input path="age"/>
。对于级联属性,则对应级联的属性名。如例子中的<form:select path="department.id" items="${departments}"
- jstl的form标签有很多组件,单选标签、复选框、普通的输入框等等,非常方便开发,这也是选用它的一大优势。不过注意:最后的提交按钮使用的仍然是原生input标签,这一点要注意。
以上例子中,form提交之后会到如下的方法中(以Post提交):
入参中的employee正是map中放入的“key”对应的实例employee。
@RequestMapping(value="/input", method=RequestMethod.POST) public String save(Employee employee){ employeeDao.save(employee); return "redirect:/emp"; }
最终重定向到/emp的页面中显示所有employee。
附:
SpringMVC 提供了多个表单组件标签,如
< form:input />、< form:select /> 等,用以绑定表单字段的
属性值,它们的共有属性如下:
- path:表单字段,对应 html 元素的 name 属性,支持级联属性 –
- htmlEscape:是否对表单值的 HTML 特殊字符进行转换,默认值 –
为 true - cssClass:表单组件对应的 CSS – 样式类名
- cssErrorClass:表单组件的数据存在错误时,采取的 CSS – 样式
- form:input、form:password、form:hidden、form:textarea
:对应 HTML 表单的 text、password、hidden、textarea
标签 - form:radiobutton: 单选框组件标签,当表单 bean 对应的
属性值和 value 值相等时,单选框被选中 - form:radiobuttons:单选框组标签,用于构造多个单选 •
框 - items:可以是一个 List、String[] 或 Map –
- itemValue:指定 radio 的 value 值。可以是集合中 bean 的一个属性值
- itemLabel:指定 radio 的 label值
- delimiter:多个单选框可以通过 delimiter 指定分隔符
- form:checkbox: 复选框组件。用于构造单个复选框
- form:checkboxs:用于构造多个复选框。使用方式同
- form:radiobuttons: 标签
- form:select: 用于构造下拉框组件。使用方式同
- form:radiobuttons: 标签
- form:option: 下拉框选项组件标签。使用方式同
- form:radiobuttons: 标签
- form:errors:显示表单组件或数据校验所对应的错误
redirect和forward
redirect和forward跳转
Spring MVC 中的 forward 和 redirect
这两篇文章短小但重点突出。
- SpringMVC学习(二)
- springmvc 学习(二)
- SpringMvc学习(二)
- (二).SpringMVC 学习-SpringMVC Hello World!
- SpringMvc学习笔记(二)SpringMvc控制器
- SpringMVC学习笔记(二)
- springmvc 学习记录(二)
- springmvc学习小结(二)
- SpringMVC学习笔记(二)
- SpringMVC学习笔记(二)
- SpringMVC学习笔记(二)
- J2EE系列之SpringMVC学习笔记(二)--SpringMVC控制器
- SpringMvc学习笔记(二)- SpringMvc的执行流程
- SpringMVC学习(二)--SpringMVC的开发过程
- springMVC学习笔记二(dispatcherServlet)
- SpringMVC学习之用户登录(二)
- SpringMVC入门学习总结(二)
- 入门Demo---SpringMVC学习笔记(二)
- linux入门基础——linux软件管理RPM
- proc_create实践(linux用户空间和内核空间交互之二)
- 《程序员的自我修养》读书笔记3
- Ubuntu ftp tftp 服务器的搭建
- 关于MPLS和Vlan隔离技术的思考
- SpringMVC学习(二)
- Android控件点击事件的简单方法
- 电脑投屏到小米盒子
- C++中的explicit
- 网络请求
- 三维坐标系的旋转矩阵
- Bootstrap居中方法
- Markdown大赛二等奖
- 点圆的关系---2