如何在Spring MVC中使用表单数据构造模型对象?

时间:2019-03-29 01:44:10

标签: java spring

我定义了一个模型类Task,并带有对另一个模型类Product的成员引用。我创建了一个表单,该表单具有Task本身的某些字段(例如Task name)和Product对象(product object)的下拉列表。我不知道如何将表单数据传递给控制器​​,控制器将使用这些表单数据构造一个Task对象。 Spring Framework有一个不错的功能可以解决吗?

Task.java:

package com.lyn.model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;


import com.lyn.model.enums.Priority;
import com.lyn.model.enums.Progress;
import com.lyn.model.enums.Stage;
import com.lyn.model.enums.TaskType;


import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
/**
 * @author    Yaning Liu
 *
 * @filename  Task.java
 *
 * @date      2019-02-16
 *
 */


@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name="_Task")
@Getter @Setter @NoArgsConstructor 
public class Task {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(nullable=false,unique=true)
    private long id;

    private String name;

    private String date;

    @Enumerated(EnumType.STRING)
    private Progress progress;

    @Enumerated(EnumType.STRING)
    private Stage stage;

    @Enumerated(EnumType.STRING)
    private TaskType task_type;


    @Enumerated(EnumType.STRING)
    private Priority priority;

    private int quality;


    @OneToOne
    private User user;

    @OneToOne
    private Product product;





    /**
     * @param id
     * @param name
     * @param date
     * @param progress
     * @param stage
     * @param task_type
     * @param priority
     * @param message
     * @param quality
     * @param user
     * @param product
     * @param type
     */
    public Task(long id, String name, String date, Progress progress, Stage stage, TaskType task_type,
            Priority priority, int quality, User user, Product product) {
        super();
        this.id = id;
        this.name = name;
        this.date = date;
        this.progress = progress;
        this.stage = stage;
        this.task_type = task_type;
        this.priority = priority;

        this.quality = quality;
        this.user = user;
        this.product = product;

    }




}

Product.java

package com.lyn.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.lyn.model.enums.ProductType;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * @author    Yaning Liu
 *
 * @filename  Product.java
 *
 * @date      2019-01-25
 *
 */
@Entity
@Table(name="_Product")
@Setter
@Getter
@NoArgsConstructor
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;


    private String name;


    private int quality;
    @Enumerated(EnumType.STRING)
    private ProductType product_type;

    /**
     * @param id
     * @param name
     * @param quality
     * @param product_type
     */
    public Product(long id, String name, int quality, ProductType product_type) {
        super();
        this.id = id;
        this.name = name;
        this.quality = quality;
        this.product_type = product_type;
    }



}

Controller.java

@ResponseBody
    @RequestMapping(method = { RequestMethod.GET, RequestMethod.POST },value="insert")
    ModelAndView insertHandler(HttpServletRequest request, HttpServletResponse response,Task task) {

        if(task.getName()==null) {
            ModelAndView model = new ModelAndView("forward:insert_task.jsp");
            List<Product> products = this.productService.getProductList();
            model.addObject("products", products);


            return model;
        }
        long sessionUserid = Long.parseLong(String.valueOf(request.getSession().getAttribute("userid")));
        User user = this.userService.findUser(sessionUserid);

        this.taskService.addTask(task);
        ModelAndView model = new ModelAndView("forward:insert_task.jsp");
        return model;
    }

insert.jsp

 <select name="product" form="add_task_form" class="form-control m-bot15">
                                                <c:forEach items="${products}" var="product">
                                                         <option value="${product}" />${product.name}</option>
                                                </c:forEach>
                            </select>

表单数据:

name: Shiqi Zhang
date: 2028/10/20 13:00
priority: medium
quality: 1
product: com.lyn.model.Product@1e2115d9

0 个答案:

没有答案