为一对多关系添加动态表单

时间:2014-09-11 04:09:51

标签: java spring hibernate

背景

我正在尝试创建一个假设商店,我可以在其中添加/更新客户和购买的商品。我的目标是使 Items 成为动态列表,因为客户可以随时选择任何内容。

我创建了两个类: ItemsItemList为:

public class Item {
    private String itemName;
    private String amount;
    private String quantity;

public class ItemList{
    private List<Item>;

JSP页面是

<input type = "text" name = "items[0].itemName"/>
<input type = "text" name = "items[0].amount"/>
<input type = "text" name = "items[0].quantity"/>

<input type = "text" name = "items[1].itemName"/>
<input type = "text" name = "items[1].amount"/>
<input type = "text" name = "items[1].quantity"/>

硬编码仅用于获取两件物品。

在我的控制器中,

@RequestMapping("/AddBill.view")
public String addBill(@ModelAttribute("items") Item item){
    System.out.println(item);
    return "NewBill";
}

这用于获取表格中的详细信息。现在我正在考虑添加客户详细信息,以便我可以关联数据。

我尝试将名称字段添加到ItemList类,但在渲染时得到null。我尝试将ItemList放到名为Customer的新类中,其中包含字段名称。

问题:请告诉我如何使表单的一部分动态,而只有少数项目只会输入一次。

更新

我想要使用的表格接近:

<input type = "text" name = "customerName"/>
<input type = "text" name = "customerContact"/>

<input type = "text" name = "items[0].itemName"/>
<input type = "text" name = "items[0].amount"/>
<input type = "text" name = "items[0].quantity"/>

<input type = "text" name = "items[1].itemName"/>
<input type = "text" name = "items[1].amount"/>
<input type = "text" name = "items[1].quantity"/>

请告诉我如何将其映射到实体。我无法在Spring中映射它。为实体中的值获取Null。请告诉我上述JSP的正确实体是什么? 在此先感谢:)

2 个答案:

答案 0 :(得分:1)

当您谈论动态内容时,构建起来很简单。

1。)输入一次的部分表格,例如捕捉Customer Name等,会出现在一个部分中。

2。)表单的一部分collection,比如说itemList客户可以通过添加新增加来增加,因此它将是grid/table结构+ and - }按钮,添加新行或删除任何行。您只需要维护列表的索引,每次用户添加新行,提交索引,如果用户删除该行,则相应地进行维护。

Spring将相应地映射此列表。

答案 1 :(得分:0)

代码中有错误。

@RequestMapping("/AddBill.view")
public String addBill(@ModelAttribute("items") Item item){
    System.out.println(item);
    return "NewBill";
}

经过spring docs后,我知道了春天是如何绑定的。摘要将是:

表达式解释

+------------+-------------------------------------------------------------------------------+
|Expression  |Explanation                                                                    |
+------------+-------------------------------------------------------------------------------+
|name        |Indicates the property name corresponding to the methods getName() or isName() |
|            |and setName(..)                                                                |
+------------+-------------------------------------------------------------------------------+ 
|account.name|  Indicates the nested property name of the property account corresponding e.g.|
|            |to the methods getAccount().setName() or getAccount().getName()                |
+------------+-------------------------------------------------------------------------------+
|account[2]  |Indicates the third element of the indexed property account. Indexed properties| 
|            |can be of type array, list or other naturally ordered collection               |
+------------+-------------------------------------------------------------------------------+
|account[key]|Indicates the value of the map entry indexed by the key of the Map property    |
|            |account                                                                        |
+------------+-------------------------------------------------------------------------------+

读完这篇文章之后,我将提交的我的参数名称与输入字段的名称相匹配。