我試圖通過使用多個下拉菜單來從百里香傳遞產品ID列表。它輸出大小,但產品對象爲空。如果我在Expense
類中創建List<String> product;
並將expenseDetail
替換爲addExpense.html
與product
;有用。我試圖通過ExpenseDetail
類從百里香到彈簧啓動的對象列表
消費類
@Entity
public class Expense {
//fields
@OneToMany(mappedBy = "expense", cascade = CascadeType.ALL)
@NotNull
private List<ExpenseDetail> expenseDetail;
//getters and setters
}
ExpenseDetail類
public class ExpenseDetail {
//fields
@ManyToOne
@JoinColumn(name = "expense_id")
private Expense expense;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
//getters and setters
}
爲合格產品addExpense.html
<form th:action="@{/expense/new}" th:method="post" th:object="${expense}">
<select id="product" th:field="*{expenseDetail[0]}">
<option value="" th:text="#{item.select.prompt}"></option>
<option th:each="product: ${products}" th:value="${product.id}" th:text="${product.name}"></option>
</select>
<select id="product" th:field="*{expenseDetail[1]}" >
<option value="" th:text="#{item.select.prompt}"></option>
<option th:each="product: ${products}" th:value="${product.id}" th:text="${product.name}"></option>
</select>
<button type="submit" name="Save expense">Save Expense</button>
</form><!-- ends expense form -->
ExpenseController
@Controller
public class ExpenseController {
@PostMapping("/expense/new")
public String addExpense(@Valid Expense expense, BindingResult result, Model model){
//This prints the list of size 2
System.out.println(expense.getExpenseDetail().size());
List<ExpenseDetail> el=expense.getExpenseDetail();
el.forEach(e->{
System.out.println(e.getProduct()); //this is null
});
return "addExpense";
}
}