springmvc学习笔记(19)——CRUD之增加

springmvc 专栏收录该内容
34 篇文章 2 订阅

CRUD之增加

这一篇笔记是CRUD的第二篇,以下的内容都在第一篇的基础之上,查看第一篇请点击springmvc学习笔记(18)——CRUD之查询

DAO中补充增加方法

    /**
     * 增加一个学生
     * @param student
     */
    public void add(Student student){
        //这里应该做一个验证,如验证学生ID是否已经存在等,为了方便,此次暂时不做处理
        //在实际情况中,在数据库中可以让ID自增长
        students.put(student.getStudentId(), student);
    }

增加学生(界面)

在jsp中,我们使用了form标签,和struts2所用的标签有些类似

前端

引入标签

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

表单

<form:form action="student" method="POST" modelAttribute="student">
    ID:<form:input path="studentId" /><br>
    姓名:<form:input path="name" /><br>
    性别:<form:radiobuttons path="sex" items="${sex }" /><br>
    省份:<form:input path="address.province" /><br>
    城市:<form:input path="address.city" /><br>
    <input type="submit" value="add" />
</form:form>

解析
1. path 相当于html标签中的name
2. form:radiobuttons 后的items 从请求域中获取选项值,就这点而言,springmvc不如strust2方 便,具体怎么将选项放入请求域,请看下面一段控制层的代码
3. 这里有一个属性modelAttribute,必写。因为springmvc默认 表单是要回显的,因此springmvc在你访问该页面的时候,会去modelAttribute中找表单中属性的值,而modelAttribute的默认值为command。如果你不写modelAttribute,会报错,你能从错误信息中找到command 这样的关键字。
4. 如果你实在不想写modelAttribute,那么可以在控制层中使用map.put("command", new Student());,详见下方控制层代码
5. 其他关于modelAttribute的用法,请查看springmvc学习笔记(12)——ModelAttribute

控制层

/**
     * 增加学生  页面
     * @param map
     * @return
     */
    @RequestMapping("/input")
    public String input(Map<String, Object> map){
        //将性别的选项放入map中,springmvc的form:radiobuttons标签将自行解析
        Map<String, String> sexMap = new HashMap<String, String>();
        sexMap.put("男", "男");
        sexMap.put("女", "女");
        map.put("sex", sexMap);
        //放入一个默认的空的信息
        map.put("student", new Student());
        //如果前端form中没有写modelAttribute,请用以下这句代码
        //map.put("command", new Student());
        return "input";
    }

以上代码是 增加学生页面 的初始化,个人感觉是有一些些麻烦,不过它能实现表单的回显,相比于原始的jsp-servlet来说,还是方便了很多。
在后面CRUD之修改中,将会使用到表单的回显

增加学生(POST提交)

将表单提交到后台,交由以下目标方法处理

    /**
     * 增加学生
     * @param student
     * @return
     * @throws UnsupportedEncodingException 
     */
    @RequestMapping(value="student",method=RequestMethod.POST)
    public String add(Student student){
        studentDao.add(student);
        return "redirect:/student";//重定向到 显示学生列表界面
    }

增加的操作基本都交由DAO来做
这里值得注意的就是 return "redirect:/student"; 重定向的路径是显示学生列表的路径,而增加学生的路径也是/student,那么springmvc怎么知道我们到底要访问哪个目标方法,这就是REST风格,有关rest的使用,请查看springmvc学习笔记(4)——REST

注意

  • 提交数据之后,也许你会发现中文乱码的问题,最优解决方案如下:
    在web.xml中添加spring自带的过滤器。
    该过滤器一定要加载 dispatcherServlet前面,否则无效。
   <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值