版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_43014205/article/details/85543316
form标签
应用场景:方便服务器数据在form表单上的展示
使用方式:1.引入标签库 2.创建表单
例如:创建两个实体类
@Setter@Getter@ToString
public class User {
private String username;
private Integer age;
private Integer gender;
private String[] hobby;
private Pet pet;
}
@Setter@Getter@ToString
public class Pet {
private String name;
private Integer id;
}
假设在服务器获取的数据如下:
@RequestMapping("/update/{id}")
public String update(@PathVariable Integer id, Model model){
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add("篮球");
arrayList.add("乒乓球");
arrayList.add("足球");
model.addAttribute("allhobbies",arrayList);
ArrayList<Object> petList = new ArrayList<>();
Pet pet1 = new Pet();
pet1.setName("狗");
pet1.setId(1);
Pet pet2 = new Pet();
pet2.setName("猫");
pet2.setId(2);
Pet pet3 = new Pet();
pet3.setName("蛇");
pet3.setId(3);
petList.add(pet1);
petList.add(pet2);
petList.add(pet3);
model.addAttribute("petlist",petList);
System.out.println(id);
User user = new User();
user.setUsername("aaa");
user.setAge(23);
user.setGender(0);
String[] hobby = new String[]{"篮球","足球"};
user.setHobby(hobby);
user.setPet(pet3);
model.addAttribute("user",user);
return "/result.jsp";
}
form表单的书写(注意引入标签库):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="fm"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>result</h1>
<fm:form modelAttribute="user" action="${pageContext.request.contextPath}/update2">
姓名:<fm:input path="username"/>
年龄:<fm:input path="age"/>
<!--单选框-->
性别:<fm:radiobutton path="gender" value="0" label="男"/>
<fm:radiobutton path="gender" value="1" label="女"/><br/>
<!--复选框-->
爱好:<fm:checkboxes path="hobby" items="${allhobbies}"/><br/>
<!--下拉列表-->
宠物:<fm:select path="pet.id" items="${petlist}" itemValue="id" itemLabel="name"/>
<input type="submit" value="修改">
</fm:form>
</body>
</html>
展示截图如下:
注意点:form标签的modelAttribute一般要写model中传过来的key值,不写就会报错,因为默认的key值是command,如果form表单中没写key值,那么model中的key值就得设置为command
服务器表单验证及回显
第一步:导入相关jar包
https://download.csdn.net/download/weixin_43014205/10889254
第二步:spring的配置文件中配置相关注解 <mvc:annotation-driven/>
第三步:在实体类上标注检验条件及错误回显信息
@Setter@Getter@ToString
public class User {
@NotBlank(message = "姓名不能为空")
private String username;
@NotNull
@Max(value = 200,message = "年龄非法")
private Integer age;
private Integer gender;
private String[] hobby;
private Pet pet;
}
第四步:在接受参数的requestmapping中设置@valid,并绑定错误信息BindingResult
@RequestMapping("/update2")
public String update2(@Valid User user, BindingResult result,Model model){
//判断有无错误信息
if (result.getErrorCount() != 0){
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add("篮球");
arrayList.add("乒乓球");
arrayList.add("足球");
model.addAttribute("allhobbies",arrayList);
ArrayList<Object> petList = new ArrayList<>();
Pet pet1 = new Pet();
pet1.setName("狗");
pet1.setId(1);
Pet pet2 = new Pet();
pet2.setName("猫");
pet2.setId(2);
Pet pet3 = new Pet();
pet3.setName("蛇");
pet3.setId(3);
petList.add(pet1);
petList.add(pet2);
petList.add(pet3);
model.addAttribute("petlist",petList);
//回到原来界面
return "/result.jsp";
}
return "/result2.jsp";
}
第五步:错误信息回显
<fm:form modelAttribute="user" action="${pageContext.request.contextPath}/update2">
姓名:<fm:input path="username"/> <fm:errors path="username" cssStyle="color: red"/>
年龄:<fm:input path="age"/> <fm:errors path="age" cssStyle="color: blue"/>
性别:<fm:radiobutton path="gender" value="0" label="男"/>
<fm:radiobutton path="gender" value="1" label="女"/><br/>
爱好:<fm:checkboxes path="hobby" items="${allhobbies}"/><br/>
宠物:<fm:select path="pet.id" items="${petlist}" itemValue="id" itemLabel="name"/>
<input type="submit" value="修改">
</fm:form>
将名字改为空 年龄改为200以上