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文档操作,国际化标签, ...
随机推荐
- RChain总体架构图
RChain是我研究区块链依赖发现的和我最契合的(主要是用scala写的),在架构上吞吐率和扩展性也是最好,未来是真正有可能实现在它官网上宣称的能够承载facebook一样的规模,具有和visa一样的 ...
- 01-Go命令与基础
什么是Go? Go是一门并发支持.垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态的高效开之间拥有良好平衡点的一门编程语言. Go的主要特点有哪些? 类型安全和内存安全 以非 ...
- Python字符串详解
字符串 作用: 名字,性别,国籍,地址等描述信息 定义: 在单引号.双引号.三引号内,由一串字符组成 优先掌握的操作: 按索引取值(正向取+反向取):只能取 切片(顾头不顾尾,步长) 长度len 成员 ...
- 【转】几种现代GPS测量方法和技术
随着科技的发展,GPS测量技术和方法也在不断的改进和更新,目前用得最多的GPS测量技术方法有如下几种:静态和快速静态定位,差分GPS,RTK,网络RTK技术等等,下面将逐一介绍: 1.静态与快速静态定 ...
- 记React+.NetCore API实现动态列导出
1.效果演示 2.用到的第三方类库 前端:React,Dva,Antd 后端:ASP.NET CORE,System.Linq.Dynamic.Core,EPPlus.Core 3.基本思路 第一:E ...
- java web 整合开发王者归来学习总结
第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...
- [UWP]实现Picker控件
1. 前言 在WPF中,很多打开下拉框(Popup或Flyout)选择一个结果值的控件,除了ComboBox等少数例外,这种控件都以-Picker做名称后缀.因为要打开关闭下拉框和计算下拉框的弹出位置 ...
- Android util.Log 工具类
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v().用于打印那些最为琐碎的.意义最小的日志信息.对应级别verbos ...
- Effective Java 之-----关于延迟初始化
1.大多数情况下,正常的初始化要优先于延迟初始化. private final FieldType field = computeFieldValue(); 2.如果利用延迟优化来破坏初始化的循环,就 ...
- PHP实现html字符实体转汉字
就一个函数搞定了: mb_convert_encoding("人人", "UTF-8", "HTML-ENTITIES"); 这个函数原本是 ...