• 第七节 认识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>

    : commandNamemodelAttribute必须对应的是一个持久化类或者传输对象,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/>

    单选按钮:<!-- 需要使用C标签进行判断,如果是中文需要使用单引号 -->

    <input type="radio" name="sex" value=""

    <c:if test="${user.sex=='' }">checked="checked"</c:if>

    >男生&nbsp;&nbsp;

    <input type="radio" name="sex" value=""

    <c:if test="${user.sex=='' }">checked="checked"</c:if>

    >女生&nbsp;&nbsp;

    <br/>

    下拉列表:

    <select name="sex">

    <option value=""

    <c:if test="${user.sex=='' }">selected="selected"</c:if>

    >女生</option>

    <option value=""

    <c:if test="${user.sex=='' }">selected="selected"</c:if>

    >男生</option>

    </select>

    <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/>

    单选按钮:<!-- 标签会给我们进行判断path="类中的属性" -->

    <form:radiobutton path="sex" value=""/>女士&nbsp;&nbsp;

    <form:radiobutton path="sex" value=""/>男士&nbsp;&nbsp;

    <br/>

    下拉列表:<!-- 显示值需要卸载标签之间的位置 -->

    <form:select path="sex">

    <form:option value="">女士</form:option>

    <form:option value="">男士</form:option>

    </form:select>

    <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 }&nbsp;&nbsp;

    </c:forEach>

    使用标签的方式为:

    复选框:

    <form:checkboxes items="${courses }" path="courseArray" itemLabel="course_name" itemValue="course_id"/>
    对应代码说明:
    <form:checkboxes items="${
    这个位置能使用el表达式集合}" path="类中的属性" itemLabel="集合对象中的要显示值" itemValue="集合对象中的要传递的值"/>

    模拟选择角色的操作

    //所有的角色查询出来

    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标签,那么必须要传递一个对象,供我们使用

    解决方案一:
    @RequestMapping(value="/add",method=RequestMethod.GET)

    public ModelAndView toAddPage(){

    ModelAndView mav = new ModelAndView();

    mav.addObject(new User());//默认为类名首字小写

    mav.setViewName("jsp/add");

    return mav;

    }

    : 方案二把对象放置到了形参中,我们让框架帮我们实例化操作,同时相当于执行了mav.addObject(new User());

    解决方案二:
    @RequestMapping(value="/add",method=RequestMethod.GET)

    public ModelAndView toAddPage(User user){

    ModelAndView mav = new ModelAndView();

    //mav.addObject(new User());//默认为类名首字小写

    mav.setViewName("jsp/add");

    return mav;

    }

    建议查看SpringMVC的课件中有一个PDF请仔细看看

    胖先生的微信

    感觉该文章对你有所帮助,请点击下方的
    推荐↓↓↓↓↓↓↓↓↓↓
    您的支持是我最大的动力



    支付宝
    扫一扫

      ☞

       

  • 相关阅读:
    自定义CSS样式,在Hover的基础上面改成
    如何获取上次访问的url地址
    霍英东:大佬的黄昏 刚看的一篇文章很有感触,摘录一点东西
    把用户当傻子的终将被用户鄙视,—|—
    WinForm支持拖拽效果
    【EntityFramework系列教程五,翻译】在ASP.NET MVC程序中借助EntityFramework读取相关数据
    关于“验证码的制作”的一些补充
    【EntityFramework系列教程六,翻译】在ASP.NET MVC程序中使用EntityFramework对相关数据进行更新
    【EntityFramework系列教程四,翻译】为ASP.NET MVC程序创建更为复杂的数据模型
    【EntityFramework系列教程三,翻译】在ASP.NET MVC程序中使用EntityFramework对数据进行排序、过滤筛选以及实现分页
  • 原文地址:https://www.cnblogs.com/pangxiansheng/p/5393459.html
Copyright © 2020-2023  润新知