1. 程式人生 > >SpringMVC框架03—數據綁定

SpringMVC框架03—數據綁定

fff 價格 drive pom 存儲 poj 轉換 tor uri

1、綁定基本數據類型

在Controller類中添加業務方法:

/**
 * 綁定基本數據類型
 */
@RequestMapping("/baseType")
@ResponseBody
public String baseType(@RequestParam("id") int id){
    return "id="+id;
}

訪問:

技術分享圖片

2、綁定包裝類

Controller類中的業務方法:

/**
 * 綁定包裝類
 */
@RequestMapping("/packageType")
@ResponseBody
public String packageType(@RequestParam("id") Integer id){
    
return "id:"+id; }

訪問:

技術分享圖片

3、綁定數組類型

Controller類中的業務方法:

/**
 * 綁定數組
 */
@RequestMapping("/arrayType")
@ResponseBody
public String arrayType(String[] name){
    StringBuffer stringBuffer = new StringBuffer();
    for (String item:name){
        stringBuffer.append(item+" ");
    }
    
return stringBuffer.toString(); }

訪問:

技術分享圖片

4、綁定POJO對象

創建Course類和Author類

public class Course {
    private int id;
    private String name;
    private double price;
    private Author author;

    //getter()、setter()
}
public class Author {
    private int id;
    private String name;

    
//getter、setter() }

創建CourseDao類,模擬數據庫存儲:

@Repository
public class CourseDao {
    //模擬數據庫存儲數據
    private Map<Integer, Course> map = new HashMap<>();

    /**
     * 添加方法
     */
    public void add(Course course){
        map.put(course.getId(),course);
    }

    /**
     * 獲取所有課程
     */
    public Collection<Course> getAll(){
        return map.values();
    }
}

Controller類中添加業務方法:

@Controller
public class DataBindController {

    @Autowired
    private CourseDao courseDao;

    /**
     * 綁定POJO對象
     */
    @RequestMapping("/pojoType")
    public String pojoType(Course course, Model model){
        //將課程添加到數據庫
        courseDao.add(course);
        //封裝數據
        model.addAttribute("courses",courseDao.getAll());
        return "showData";
    }

}

創建addCourse.jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加課程</title>
</head>
<body>
<form action="/pojoType" method="post">
    <p>
        課程編號:<input type="text" name="id">
    </p>
    <p>
        課程名稱:<input type="text" name="name">
    </p>
    <p>
        課程價格:<input type="text" name="price">
    </p>
    <p>
        講師姓名:<input type="text" name="author.name">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>
</body>
</html>

創建showData.jsp頁面,顯示數據:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>展示數據</title>
</head>
<body>

    <table border="1" width="50%">
        <tr>
            <th>課程編號</th>
            <th>課程名稱</th>
            <th>課程價格</th>
            <th>講師姓名</th>
        </tr>
        <c:forEach var="course" items="${courses}">
            <tr>
                <td>${course.id}</td>
                <td>${course.name}</td>
                <td>${course.price}</td>
                <td>${course.author.name}</td>
            </tr>
        </c:forEach>
    </table>

</body>
</html>

訪問URL:

技術分享圖片

提交後結果:

技術分享圖片

5、綁定List集合

創建CourseList類,用於存儲集合對象

public class CourseList {
    private List<Course> courses;

    public List<Course> getCourses() {
        return courses;
    }

    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }
}

Controller類中的業務方法:

/**
 * 綁定List集合
 */
@RequestMapping("/listType")
public String listType(CourseList courseList,Model model){
    for (Course course : courseList.getCourses()){
        courseDao.add(course);
    }
    model.addAttribute("courses",courseDao.getAll());
    return "showData";
}

創建addCourseList.jsp頁面,添加數據:

<form action="/listType" method="post">
    <p>
        課程1編號:<input type="text" name="courses[0].id">
    </p>
    <p>
        課程1名稱:<input type="text" name="courses[0].name">
    </p>
    <p>
        課程1價格:<input type="text" name="courses[0].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[0].author.name">
    </p>
    <hr>
    <p>
        課程2編號:<input type="text" name="courses[1].id">
    </p>
    <p>
        課程2名稱:<input type="text" name="courses[1].name">
    </p>
    <p>
        課程2價格:<input type="text" name="courses[1].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[1].author.name">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>

訪問URL:

技術分享圖片

提交後結果:

技術分享圖片

6、綁定Map集合

創建CourseMap類,用於存儲Map數據:

public class CourseMap {
    private Map<String,Course> courses = new HashMap<>();

    public Map<String, Course> getCourses() {
        return courses;
    }

    public void setCourses(Map<String, Course> courses) {
        this.courses = courses;
    }
}

Controller類中的業務方法:

/**
 * 綁定Map集合
 */
@RequestMapping("/mapType")
public String mapType(CourseMap courseMap,Model model){
    for (String key : courseMap.getCourses().keySet()){
        Course course = courseMap.getCourses().get(key);
        courseDao.add(course);
    }
    model.addAttribute("courses",courseDao.getAll());
    return "showData";
}

創建addCourseMap.jsp頁面:

<form action="/mapType" method="post">
    <p>
        課程1編號:<input type="text" name="courses[‘one‘].id">
    </p>
    <p>
        課程1名稱:<input type="text" name="courses[‘one‘].name">
    </p>
    <p>
        課程1價格:<input type="text" name="courses[‘one‘].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[‘one‘].author.name">
    </p>
    <hr>
    <p>
        課程2編號:<input type="text" name="courses[‘two‘].id">
    </p>
    <p>
        課程2名稱:<input type="text" name="courses[‘two‘].name">
    </p>
    <p>
        課程2價格:<input type="text" name="courses[‘two‘].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[‘two‘].author.name">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>

訪問URL:

技術分享圖片

提交後結果:

技術分享圖片

7、綁定Set集合

創建CourseSet類,必須要在無參構造中,向set集合添加兩個對象!

public class CourseSet {
    private Set<Course> courses = new HashSet<>();

    public Set<Course> getCourses() {
        return courses;
    }

    public void setCourses(Set<Course> courses) {
        this.courses = courses;
    }

    public CourseSet() {
        courses.add(new Course());
        courses.add(new Course());
    }
}

Controller類中的業務方法:

/**
 * 綁定Set集合
 */
@RequestMapping("/setType")
public String setType(CourseSet courseSet,Model model){
    for (Course course : courseSet.getCourses()){
        courseDao.add(course);
    }
    model.addAttribute("courses",courseDao.getAll());
    return "showData";
}

創建addCourseSet.jsp頁面

<form action="/setType" method="post">
    <p>
        課程1編號:<input type="text" name="courses[0].id">
    </p>
    <p>
        課程1名稱:<input type="text" name="courses[0].name">
    </p>
    <p>
        課程1價格:<input type="text" name="courses[0].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[0].author.name">
    </p>
    <hr>
    <p>
        課程2編號:<input type="text" name="courses[1].id">
    </p>
    <p>
        課程2名稱:<input type="text" name="courses[1].name">
    </p>
    <p>
        課程2價格:<input type="text" name="courses[1].price">
    </p>
    <p>
        講師姓名:<input type="text" name="courses[1].author.name">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>

訪問URL:

技術分享圖片

提交後結果:

技術分享圖片

8、綁定JSON數據

在pom.xml配置文件中添加jackson依賴:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.8.3</version>
</dependency>

在springmvc.xml文件中配置消息轉換器:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
    </mvc:message-converters>
</mvc:annotation-driven>

如果在配置消息轉換器時,出現報紅線,可能是約束的原因,只需要在springmvc.xml的約束中添加以下配置:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

Controller類中的業務方法:

/**
 * 綁定JSON數據
 */
@RequestMapping("/jsonType")
@ResponseBody
public Course jsonType(@RequestBody Course course){
    course.setPrice(course.getPrice()+100);
    return course;
}

創建sendJson.jsp頁面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>綁定JSON數據</title>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
        $(function () {
            var course = {
                "id":"8",
                "name":"SSM框架整合",
                "price":"200"
            };
            $.ajax({
                url:"/jsonType",
                data:JSON.stringify(course),
                type:"post",
                contentType:"application/json;charse=UTF-8",
                dataType:"json",
                success:function(data){
                    alert(data.name+"---"+data.price);
                }
            })
        });
    </script>
</head>
<body>

</body>
</html>

發送URL:

技術分享圖片

SpringMVC框架03—數據綁定