背景
我正在尝试创建一个假设商店,我可以在其中添加/更新客户和购买的商品。我的目标是使 Items 成为动态列表,因为客户可以随时选择任何内容。
我创建了两个类:
Items
,ItemList
为:
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的正确实体是什么? 在此先感谢:)
答案 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 |
+------------+-------------------------------------------------------------------------------+
读完这篇文章之后,我将提交的我的参数名称与输入字段的名称相匹配。