您的位置:首页 > 编程语言 > Java开发

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

2015-04-26 22:30 274 查看

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: