标签简介:
srpingmvc中的form标签只是restful风格的请求访问,使用这个form标签应该保证有数据的回显,也就是说,它一出来就要展示数据的。
1.导入标签库
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
2.form:form标签
①action属性
和HTML标签中的form标签的action属性作用一致,用来设置表单提交的URL地址。如果form:form标签省略action属性,那么会使用当前表单所在页面的URL地址作为action属性的值。
②modelAttribute属性
该标签无论是执行保存还是更新操作,都要从请求域中读取模型数据。如果没有设置modelAttribute属性那么就以command为属性名从请求域中读取。如果找不到则会抛出异常。
所以要想form:form标签正常工作一定要将一个模型对象保存到请求域中,哪怕是保存数据时也要创建一个空对象保存。
3.表单标签的共同属性
①path
表单字段,对应HTML元素的name属性,支持级联属性。
②htmlEscape
是否对表单值的HTML特殊字符进行转换,默认值为true。
③cssClass
表单组件对应的CSS样式类名。
④cssErrorClass
表单组件的数据存在错误时,采取的CSS样式。
4.form:radiobuttons
单选框组标签,用于构造多个单选框
①items
可以是一个List、String[]或Map
②itemValue
通过指定bean的一个属性名生成radio的value值。可以是集合中bean的一个属性值
③itemLabel
通过指定bean的一个属性名生成radio的label值
④delimiter
多个单选框可以通过delimiter指定分隔符
5.form:errors
显示表单组件或数据校验所对应的错误 <form:errors path=””/>:显示表单所有的错误 <form:errors path=”user”/>:显示所有以user为前缀的属性对应的错误 <form:errors path=”userName”/>:显示特定表单对象属性的错误
案例:
第一步:引入标签库:这里是再jsp中
<%@taglib uri="http://www.springframework.org/tags/form" prefix="fm"%>
第二步:创建一个对象(domain)和引用的对象类型
这里使用了lombok插件
同时注意:这里的性格在前端界面应该是一个单选选项,爱好是一个数组,宠物是一个对象类型的
用户(user)domain
1 @Data
2 public class User {
3 private String user_name;
4 private String user_age;
5 private Integer user_sex;
6 private String[] hobby;//爱好
7 private Pet pet;
8 }
宠物(pet)domain
1 @Data
2 public class Pet {
3 private Integer id;
4 private String name;
5 }
第三步:创建一个连接发送请求
1 <a href="${pageContext.request.contextPath}/testForm">springmvc表单测试</a>
第四步:创建一个controller接收并处理请求
1 @RequestMapping("/testForm")
2 public String test13(Model model){
3 //存放爱好的集合 这里我们注意一下,创建一个爱好的集合,存放可选的全部爱好
4 ArrayList<String> hobbylist = new ArrayList<>();
5 hobbylist.add("英雄联盟");
6 hobbylist.add("王者荣耀");
7 hobbylist.add("刀塔");
8
9 //存放宠物的集合 这个集合存放的是前端界面中可选的全部宠物
10 ArrayList<Pet> pets = new ArrayList<>();
11 Pet pet1 = new Pet();
12 pet1.setId(1);
13 pet1.setName("老虎");
14 Pet pet2 = new Pet();
15 pet2.setId(2);
16 pet2.setName("狮子");
17 Pet pet3 = new Pet();
18 pet3.setId(3);
19 pet3.setName("猎豹");
20 //将宠物添加到集合中
21 pets.add(pet1);
22 pets.add(pet2);
23 pets.add(pet3);
24
25 //创建对象并设置属性
26 User user = new User();
27 user.setUser_name("蒲胤臻");
28 user.setUser_age("23");
29 String[] hobby = new String[]{"英雄联盟","王者荣耀"};//这里的爱好是用户本来就拥有的爱好
30 user.setHobby(hobby);
31 user.setPet(pet2);//这里是用户本来就拥有的宠物
32 user.setUser_sex(0);//这里设置用户的性别
33
34 //将上面设置好的数据全部存放到model中的request域中
35 model.addAttribute("hobbylist",hobbylist);
36 model.addAttribute("pets",pets);
37 model.addAttribute("command",user);
38 return "resoult.jsp";
39 }
第五步:创建前端界面使用springmvc表单接收数据并回显数据
这里做一下解释:
- path:表示对象的那个属性
- label:表示要显示出来的信息
- items:表示他本来拥有的所有信息,然后你可以从这里面选择哪些,比如爱好,他就表示所有可选的爱好,就是我们提前设置的
- itemValue:表示选项的id值
- itemLabel:表示选项里展示出来的数据
1 <h3>表单展示</h3>
2 <fm:form action="/formdata" method="post">
3 姓名:<fm:input path="user_name"/> <br>
4 年龄:<fm:input path="user_age"/> <br>
5 性别:<fm:radiobutton path="user_sex" value="1" label="男"/>
6 <fm:radiobutton path="user_sex" value="0" label="女"/> <br>
7 爱好:<fm:checkboxes path="hobby" items="${hobbylist}"/> <br>
8 宠物:<fm:select path="pet.id" items="${pets}" itemValue="id" itemLabel="name"/> <br>
9 <input type="submit" value="提交">
10 </fm:form>
结果:我们把要回显的数据已经全部自动填充了