SpringMVC的标签库
| form |
| input |
| password |
| hidden |
| textarea |
| checkbox |
| checkboxes |
| radiobutton |
| radiobuttons |
| select |
| option |
| options |
| errors |
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
form和input标签的使用;上代码;
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form method = "post" action = "register">
<table>
<tr>
<td>姓名:</td>
<td><form:input path = "username"></td>
</tr>
<tr>
<td>性别:</td>
<td><form:input path = "sex"/></td>
</tr>
<tr>
<td>年龄:</td>
<td><form:input path = "age"/></td>
</tr>
</table>
</form:form>
而在控制器这边,则只需要将user里面的属性设置好了之后放到modelAttribute模型容器中就可以了,其中要记得放入默认的容器command中
@Controller
public class UserController{
@RequestMapping(value = "/registerForm",method = RequestMethod.POST)
public String registerForm(Model model){
User user = new User("jack","男",28);
model.addAttribute("command",user);
return "registerForm";
}
}
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "register">
<table>
<tr>
<td>姓名:</td>
<td><form:input path = "username"></td>
</tr>
<tr>
<td>性别:</td>
<td><form:input path = "sex"/></td>
</tr>
<tr>
<td>年龄:</td>
<td><form:input path = "age"/></td>
</tr>
</table>
</form:form>
在form表单标签中加一个modelAttribute = "user";就可以了;接下来是控制器的改变;
@RequestMapping(value = "/registerForm2",method = RequestMethod.GET)
public String registerForm2(Model model){
User user = new User("jack","男",28);
model.addAttribute("user",user);
return "registerForm2";
}
接下来的几个标签都是正常操作,只是封装了path属性而已;
<form:password path = "password"/>
<form:hidden path = "id"/>
<form:textarea path = "remark" rows = "5" cols = "20"/>
@Controller
public class UserController{
@RequestMapping(value = "/checkboxForm",method = RequestMethod.GET)
public String registerForm(Model model){
User user = new User();
user.setReader(true);
List<String> list = new ArrayList<String>();
list.add("JAVAEE");
list.add("Spring");
user.setCourses(list);
model.addAttribute("user",user);
return "checkboxForm";
}
}
在这个控制器中,通过List容器来封装选中选项,而全部选项则是直接列出来JSP页面中
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "checkboxForm">
<table>
<tr>
<td>选择课程</td>
<td>
<form:checkbox path = "courses" value = "JAVAEE" label = "JAVAEE"/>
<form:checkbox path = "courses" value = "Mybatis" label = "MyBatis"/>
<form:checkbox path = "courses" value = "Spring" label = "Spring"/>
</td>
</tr>
</table>
</form:form>
@RequestMapping(value = "/checkboxesForm",method = RequestMethod.GET)
public String registerForm(Model model){
User user = new User();
List<String> list = new ArrayList<String>();
list.add("JAVAEE");
list.add("Spring");
user.setCourses(list);
List<String> courseList = new ArrayList<String>();
courseList.add("JAVAEE");
courseList.add("MyBatis");
courseList.add("Spring");
model.addAttribute("user",user);
model.addAttribute("courseList",courseList);
return "checkboxesForm";
}
看到没有,将全部选项和选中选项全部进行封装,都放在modelAttribute容器中;
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "checkboxesForm">
<table>
<tr>
<td>选择课程:</td>
<td>
<form:checkboxes items = "${courseList}" path = "courses"/>
</td>
</tr>
</table>
</form:form>
@RequesetMapping(value = "/checkboxesForm2",method = RequestMethod.GET)
public String registerForm2(Model model){
User user = new User();
List<String> list = new ArrayList<String>();
list.add("1");
list.add("3");
user.setCourses(list);
Map<String,String> courseMap = new HashMap<String, String>();
courseMap.put("1","JAVAEE");
courseMap.put("2","MyBatis");
courseMap.put("3","Spring");
model.addAttribute("user",user);
model.addAttribute("courseMap",courseMap);
return "checkboxesForm2";
}
用Map容器封装,而JSP页面没有变化的;
<form:form modelAttribute = "user" method = "post" action = "checkboxesForm2">
<table>
<tr>
<td>选择课程:</td>
<td>
<form:checkboxes items = "${courseMap}" path = "courses"/>
</td>
</tr>
</table>
</form:form>
好了,理论上这已经是最好的了,但是我们知道,这些选项到真正的企业开发中都是用到了数据库的,而谈到数据库,我们当然就想到了ORM数据库框架,而这些框架都是用对象来映射对应的数据库数据的,那我们能不能将这些选项(不管是全部还是选中)先封装在一个对象中,然后再把这一个个的对象封装到list模型里面呢?这才是真正的骚操作啊。。。。
@RequestMapping(value = "/checkboxesForms",method = requestMethod.GET)
public String registerForm3(Model model){
Employee employee = new Employee();
Dept dept = new Dept(1,"开发部");
List<dept> list = new ArrayList<Dept>();
list.add(dept);
employee.setDepts(list);
List<Dept> deptList = new ArrayList<Dept>();
deptList.add(dept);
deptList.add(new Dept(2,"销售部"));
deptList.add(new Dept(3,"财务部"));
model.addAttribute("employee",employee);
model.addAttribute("deptList",deptList);
return "checkboxesForm3";
}
看到了吗,将选项封装成对象,再将对象封装在list容器中,而在JSP页面要注意一点,你要声明对象里面有什么?不然的话就是一个对象的地址而已
<form:form modelAttribute = "employee" method = "post" action = "checkboxesForm3">
<table>
<tr>
<td>选择部门:</td>
<td>
<form:checkboxes items = "${deptList}" path = "depts"
itemLabel = "name" itemValue = "id"/>
</td>
</tr>
</table>
</form:form>
@Controller
public class UserController{
@RequestMapping(value = "/radiobuttonForm",method = RequestMethod.GET)
public String registerForm(Model model){
User user = new User();
user.setSex("男");
model.addAttribute("user",user);
return "radiobuttonForm";
}
}
Controller内容如下;
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "radiobuttonForm">
<table>
<tr>
<td>性别:</td>
<td>
<form:radiobutton path = "sex" value = "男"/>男
<form:radiobutton path = "sex" value = "女"/>女
</td>
</tr>
</table>
</form:form>
@RequestMapping(value = "/radiobuttonsForm",method = RequestMethod.GET)
public String registerForm2(Model model){
User user = new User();
user.setSex("男");
List<String> sexList = new ArrayList<String>();
sexList.add("男");
sexList.add("女");
model.addAttribute("user",user);
model.addAttribute("sexList",sexList);
return "radiobuttonsForm";
}
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "radiobuttonForm">
<table>
<tr>
<td>性别:</td>
<td>
<form:radiobuttons path = "sex" items = "${sexList}"/>
</td>
</tr>
</table>
</form:form>
下面是Map容器方法;
@RequestMapping(value = "/radiobuttonForm2",method = RequestMethod.GET)
public class registerForm3(Model model){
User user = new User();
user.setSex("1");
Map<String,String> sexMap = new HashMap<String,String>();
sexMap.put("1","男");
sexMap.put("2","女");
model.addAttribute("user",user);
model.addAttribute("sexMap",sexMap);
return "radiobuttonsForm2";
}
<%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form" %>
<form:form modelAttribute = "user" method = "post" action = "radiobuttonForm">
<table>
<tr>
<td>性别:</td>
<td>
<form:radiobuttons path = "sex" items = "${sexMap}"/>
</td>
</tr>
</table>
</form:form>
@RequestMapping(value = "/selectForm",method = RequestMethod.GET)
public String selectForm(Model model){
User user = new User();
user.setDeptId(2);
model.addAttribute("user",user);
return "selectForm";
}
<form:form modelAttribute = "user" method = "post" action = "selectForm">
<table>
<tr>
<td>部门:</td>
<td>
<form:select path = "deptId">
<form:option value = "1">财务部</form:option>
<form:option value = "2">开发部</form:option>
<form:option value = "3">销售部</form:option>
</form:select>
</td>
</tr>
</table>
</form:form>
@RequestMapping(value = "/selectForm2",method = RequestMethod.GET)
public String selectForm2(Model model){
User user = new User();
user.setDeptid(2);
Map<Integer,String> deptMap = new HashMap<Integer,String>();
deptMap.put(1,"财务部");
deptMap.put(2,"开发部");
deptMap.put(3,"销售部");
model.addAttribute("user",user);
model.addAttribute("deptMap",deptMap);
return "selectForm2";
}
<form:form modelAttribute = "user" method = "post" action = "selectForm2">
<table>
<tr>
<td>部门:</td>
<td>
<form:select path = "deptId" items = "${deptMap}"/>
</td>
</tr>
</table>
</form:form>
@RequestMapping(value = "/selectForm4",method = RequestMethod.GET)
public String selectForm4(Model model){
User user = new User();
user.setDeptId(2);
List<Dept> deptList = new ArrayList<Dept>();
deptList.add(new Dept(1,"财务部"));
deptList.add(new Dept(2,"开发部"));
deptList.add(new Dept(3,"销售部"));
model.addAttribute("user",user);
model.addAttribute("deptList",deptList);
return "selectForm4";
}
<form:form modelAttribute = "user" method = "post" action = "selectForm2">
<table>
<tr>
<td>部门:</td>
<td>
<form:select path = "deptId" items = "${deptList}"
itemLabel = "name" itemValue = "id"/>
</td>
</tr>
</table>
</form:form>
public class UserValidator implements Validator{
@Override
public boolean supports(Class<?> clazz){
return User.class.equals(clazz);
}
@Override
public void validator(Object object,Errors errors){
ValidatorUtils.rejectIfEmpty(errors,"username",null,"用户名不能为空");
ValidatorUtils.rejectIfEmpty(errors,"sex",null,"性别不能为空");
ValidatorUtils.rejectIfEmpty(errors,"age",null,"年龄不能为空");
}
}
UserValidator类实现org.springframework.validator.Validator接口,完成验证的功能;
@Controller
public class UserController{
@RequestMapping(value = "/registerForm",method = RequestMethod.GET)
public String registerForm(Model model){
User user = new User();
model.addAttribute("user",user);
return "registerForm";
}
@InitBinder
public void initBinder(DataBinder binder){
binder.setValidator(new UserValidator());
}
@RequestMapping(value = "/register",method = RequestMethod.POST)
public String register(@Validated User user,Errors errors){
if(errors.hasFieldErrors())
return "registerForm";
return "submit";
}
}
UserController类使用@InitBinder注解绑定验证对象;
<form:form modelAttribute = "user" method = "post" action = "register">
<table>
<tr>
<td>姓名</td>
<td><form:input path = "username"/></td>
<td><font color = "red"><form:errors path = "username"></font></td>
</tr>
<tr>
<td>性别</td>
<td><form:input path = "sex"/></td>
<td><font color = "red"><form:errors path = "sex"></font></td>
</tr>
<tr>
<td>年龄</td>
<td><form:input path = "age"/></td>
<td><font color = "red"><form:errors path = "age"></font></td>
</tr>
</table>
</form:form>
SpringMVC的标签库的更多相关文章
- springmvc表单标签库的使用
springmvc中可以使用表单标签库,支持数据绑定,用来将用户输入绑定到领域模型. 例子来源<Servlet.JSP和SpringMVC学习指南> 项目代码 关键代码及说明 bean对象 ...
- springMVC学习总结(二) --springMVC表单处理、标签库、静态文件处理
根据springMVC学习总结(一) --springMVC搭建 搭建项目 一.表单处理 1.创建两个java类 Student.java, StudentController.java. 2.在js ...
- springMVC项目引入jstl标签库若干问题的总结
中午,不知道动到项目的哪个地方了,之前在联系人列表页面用的好好的jstl标签库突然报错了:<%@taglib prefix="c" uri="http://java ...
- 自定义jstl标签库
开发环境:Spring+SpringMVC +Maven +Mybatis JSTL 标签库的配置: 导入对应的 jstl.jar 和 standard.jar ,我使用的配置如下: <prop ...
- 关于Spring MVC中的表单标签库的使用
普通的MVC设计模式中M代表模型层,V代表视图层,C代表控制器,SpringMVC是一个典型的MVC设置模式的框架,对于视图和控制器的优化很多,其中就有与控制器相结合的JSP的表单标签库. 我们先简单 ...
- jsp引用JSTL核心标签库
一.引用JSTL 1. JSTL的引入可以让JSP代码中<%%>等代码消失掉,再结合EL表达式,会更加方便以及美观. 2. 各套框架(还没有学习,比如struts,SpringMVC等 ...
- Spring MVC -- JSP标准标签库(JSTL)
JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能.JSTL支持通用的.结构化的任务,比如迭 ...
- Spring MVC框架及标签库
1.Spring MVC技术 1. 当DispatcherServlet接到请求时,他先回查找适当的处理程序来处理请求.DispatcherServlet通过一个或者多个处理程序映射,将每个请求映射到 ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
随机推荐
- Hibernate (四)
1 懒加载 (感觉用处不是很大) 需要的时候加载,不需要的时候就不加载. 1.1 环境的搭建 hibernate.cfg.xml <?xml version='1.0' encoding='ut ...
- Python爬虫进阶(Scrapy框架爬虫)
准备工作: 配置环境问题什么的我昨天已经写了,那么今天直接安装三个库 首先第一步: ...
- awk说明书(转)
ref:http://blog.chinaunix.net/uid-429659-id-122573.html awk使用手册 作者:awk使用手册什么是awk? 你可能对UNIX比较熟悉,但你可能对 ...
- nagios中监测dns 227.7.128.68的网络状态
[root@nhserver2 ~]# cd /usr/local/nagios/etc/objects [root@nhserver2 objects]# vim hosts_dns.cfgdefi ...
- 02-Go语言数据类型与变量
Go基本类型 布尔型: bool - 长度: 1字节 - 取值范围: true,false - 注意事项: 不可以用数字代表true或false 整型: int/uint - 根据运行平台可能为32或 ...
- R语言-探索两个变量
目的: 通过探索文件pseudo_facebook.tsv数据来学会两个变量的分析流程 知识点: 1.ggplot语法 2.如何做散点图 3.如何优化散点图 4.条件均值 5.变量的相关性 6.子集散 ...
- Spring源码解析一(框架梳理)
整体架构 打算开始写这个系列,不为上首页,也不为博取多少关注,只有一个目的:梳理知识,扩充思路:废话不多,开始吧.第一步,大家去spring的官方github下面去下载它的源码,具体的自己谷歌,我已经 ...
- 小甲鱼OD学习第9讲
这次我们的任务是破解这个要注册的软件,如下图所示 当我们输入账号密码的时候,它会提示输入的账号密码是无效的,如下图 我们把程序载入OD,然后在查找字符串那里输入提示的无效账号密码的字符串,如下图 然后 ...
- 异步任务利器Celery(一)介绍
django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要 ...
- GNU autotools自动生成Makefile 介绍
一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...