SpringMVC form标签、服务器表单验证、错误信息回显

版权声明:本文为博主原创文章,未经博主允许不得转载。 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以上

猜你喜欢

转载自blog.csdn.net/weixin_43014205/article/details/85543316