第七节 认识SpringMVC中的表单标签
|
所谓成熟,就是: --胖先生 |
SpringMVC的表单标签
回顾: JSTL标签 --C标签 FMT标签
自学:JSP如何自定义标签[开源社区当中有别人写好的标签]
表单标签:使用规则
模拟开发环境:
1.更新操作
A.通过主键进行查询
B.JSP显示
C.提交表单
@RequestMapping(value="/update/{user_id}",method=RequestMethod.GET) public ModelAndView toUpdatePage(@PathVariable Integer user_id){ ModelAndView mav = new ModelAndView(); User user = new User();//模拟--->>>>>从数据库查询出来 user.setUser_id(user_id); user.setAccount("wukong"); user.setUser_name("悟空"); user.setPassword("123456");//使用form标签无法显示密码 user.setPhoto("1.jpg"); //传递数据 mav.addObject("user", user); //传递到那个页面 mav.setViewName("jsp/update"); return mav; } |
<h2>传统方式</h2> <form action="update" method="post" > 账号:<input type="text" name="account" value="${user.account }"><br/> 密码:<input type="text" name="password" value="${user.password }"><br/> 姓名:<input type="text" name="user_name" value="${user.user_name }"><br/> <input type="submit" value="用户更新[传统方式]"> <!-- 隐藏域 --> <input type="hidden" name="_method" value="put"> <input type="hidden" name="user_id" value="${user.user_id }"> </form> |
注:如果使用传统方式,注意一般都是使用EL表达式来完成操作 |
<h2>SpringMVC表单标签方式</h2> <form:form action="update" method="put" commandName="user"> 账号:<form:input path="account"/><br/> 密码:<form:input path="password"/><br/> 姓名:<form:input path="user_name"/><br/> <input type="submit" value="用户更新[标签方式]"> <!-- 隐藏域 --> <form:hidden path="user_id"/> </form:form> |
注: commandName和modelAttribute必须对应的是一个持久化类或者传输对象,path属性对应的是必须是类中的属性,并且要知道可以使用普通的HTML标签 |
<h2>混合模式-看密码的写法</h2> <form:form action="update" method="put" modelAttribute="user"> 账号:<form:input path="account"/><br/> 密码:<input type="password" name="password" value="${user.password }"><br/> 姓名:<form:input path="user_name"/><br/> <input type="submit" value="用户更新[标签方式]"> <!-- 隐藏域 --> <form:hidden path="user_id"/> </form:form> |
(1) 测试单选按钮和下拉列表
@RequestMapping(value="/update/{user_id}",method=RequestMethod.GET) public ModelAndView toUpdatePage(@PathVariable Integer user_id){ ModelAndView mav = new ModelAndView(); User user = new User();//从数据查询出来 user.setUser_id(user_id); user.setAccount("wukong"); user.setUser_name("悟空"); user.setPassword("123456"); user.setPhoto("1.jpg"); user.setSex("男");//在对象增加属性sex //传递数据 mav.addObject("user", user); //传递到那个页面 mav.setViewName("jsp/update"); return mav; } |
||
<form action="update" method="post" > 账号:<input type="text" name="account" value="${user.account }"><br/> 密码:<input type="text" name="password" value="${user.password }"><br/> 姓名:<input type="text" name="user_name" value="${user.user_name }"><br/>
<br/>
<input type="submit" value="用户更新[传统方式]"> <!-- 隐藏域 --> <input type="hidden" name="_method" value="put"> <input type="hidden" name="user_id" value="${user.user_id }"> </form> |
||
|
||
<h2>SpringMVC表单标签方式,使用标签之后看method的属性使用</h2> <form:form action="update" method="put" commandName="user"> 账号:<form:input path="account"/><br/> 密码:<form:input path="password"/><br/> 姓名:<form:input path="user_name"/><br/>
<br/>
<input type="submit" value="用户更新[标签方式]"> <!-- 隐藏域 --> <form:hidden path="user_id"/> </form:form> |
复选框练习:
//用户增加属性 private Integer[] courseArray; public Integer[] getCourseArray() { return courseArray; } public void setCourseArray(Integer[] courseArray) { this.courseArray = courseArray; } |
模拟数据准备: List<Course> courseList = new ArrayList<Course>(); Course c = new Course(); c.setCourse_id(100); c.setCourse_name("数学"); courseList.add(c); c = new Course(); c.setCourse_id(200); c.setCourse_name("语文"); courseList.add(c); c = new Course(); c.setCourse_id(300); c.setCourse_name("英语"); courseList.add(c); mav.addObject("courses", courseList); //-----------------结束-------------------------- //用户拥有哪些课程---- 开始--如果使用List<Course>有错误?需要再研究一下??? Integer[] cs = new Integer[]{200,300}; user.setCourseArray(cs); //-----------------结束-------------------------- |
传统方式为:[使用了双层for循环,这样的方式不是很好,可以使用二期的jquery来完成] 选择课程: <c:forEach items="${courses }" var="course"> <input type="checkbox" name="courseList" value="${course.course_id }" <c:forEach items="${user.courseArray }" var="c"> <c:if test="${c==course.course_id }">checked="checked"</c:if> </c:forEach> >${course.course_name } </c:forEach> |
使用标签的方式为: 复选框: <form:checkboxes items="${courses }" path="courseArray" itemLabel="course_name" itemValue="course_id"/> |
模拟选择角色的操作 |
//所有的角色查询出来 List<Role> roleList = new ArrayList<>(); Role r = new Role(); r.setRole_id(9999); r.setRole_name("超级管理员"); roleList.add(r); r = new Role(); r.setRole_id(8888); r.setRole_name("管理员"); roleList.add(r); r = new Role(); r.setRole_id(7777); r.setRole_name("测试员"); roleList.add(r); mav.addObject("roleList", roleList); //----在持久化类User中增加 private Role role; 属性 r = new Role(); r.setRole_id(7777); user.setRole(r); |
传统方式: <select name="role.role_id"> <c:forEach items="${roleList }" var="role"> <option value="${role.role_id }" <c:if test="${user.role.role_id==role.role_id }">selected="selected"</c:if> >${role.role_name }</option> </c:forEach> </select> 代码说明: <select name="持久化类中的属性是对象,你赋值应该是该对象下的属性"> <c:forEach items="${传递过来的集合名词}" var="role"> <option value="${role.role_id }" <c:if test="${user.role.role_id[对象中值]==role.role_id[遍历的值] }">selected="selected"</c:if> >${role.role_name }</option> </c:forEach> </select> |
SpringMVC标签方式: 模拟选择角色: <form:select path="role.role_id"> <form:options items="${roleList }" itemLabel="role_name" itemValue="role_id"/> </form:select> 代码说明: <form:select path="持久化类类中的属性是对象,你赋值应该是该对象下的属性"> <form:options items="${roleList }" itemLabel="role_name[集合中的包含对象下的属性]" itemValue="role_id[集合中的包含对象下的属性]"/> </form:select> |
2.关于添加操作跳转界面使用form标签的说明
<body> <h2>添加操作</h2> <form:form method="post" action="add" modelAttribute="user"> 账号:<form:input path="account"/> </form:form> </body> |
<h2>添加操作</h2> <form:form method="post" action="add" commandName="user"> 账号:<form:input path="account"/> </form:form> |
注: 如果要使用form标签,那么必须要传递一个对象,供我们使用 |
解决方案一: public ModelAndView toAddPage(){ ModelAndView mav = new ModelAndView(); mav.addObject(new User());//默认为类名首字小写 mav.setViewName("jsp/add"); return mav; } |
注: 方案二把对象放置到了形参中,我们让框架帮我们实例化操作,同时相当于执行了mav.addObject(new User()); |
解决方案二: public ModelAndView toAddPage(User user){ ModelAndView mav = new ModelAndView(); //mav.addObject(new User());//默认为类名首字小写 mav.setViewName("jsp/add"); return mav; } |
建议查看SpringMVC的课件中有一个PDF请仔细看看
胖先生的微信 |
感觉该文章对你有所帮助,请点击下方的
|