我定义了一个模型类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