这是我的模特课
public class DynamicRow {
private String id;
private String name;
private String email;
public DynamicRow(String id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public DynamicRow() {
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "DynamicRow [id=" + id + ", name=" + name + ", email=" + email
+ "]";
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
这是表单类
public class DynamicRowForm {
private List<DynamicRow> dynamicRow = LazyList.decorate(new ArrayList<DynamicRow>(), FactoryUtils.instantiateFactory(DynamicRow.class));
public DynamicRowForm() {
}
public List<DynamicRow> getDynamicRow() {
return dynamicRow;
}
public void setDynamicRow(List<DynamicRow> dynamicRow) {
this.dynamicRow = dynamicRow;
}
}
以下是我的控制器
@RequestMapping(value="/createDetails")
public String list(Model model){
DynamicRowForm dynamicRowForm = new DynamicRowForm();
model.addAttribute("DynamicRowForm",dynamicRowForm);
return "test2";
}
@RequestMapping(value="/save")
public String showList(Model model,@ModelAttribute("DynamicRowForm") DynamicRowForm dynamicRowForm) {
System.out.println(dynamicRowForm.getDynamicRow());
return "success";
}
这是我的jsp页面,命名为test2
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
var rowCount = 1;
function addMoreRows(form) {
rowCount ++;
var recRow = '<p id="rowCount'+rowCount+'"><tr><td><input name="" type="text" size="17%" maxlength="120" /></td><td><input name="" type="text" maxlength="120" style="margin: 4px 5px 0 5px;"/></td><td><input name="" type="text" maxlength="120" style="margin: 4px 10px 0 0px;"/></td></tr> <a href="javascript:void(0);" onclick="removeRow('+rowCount+');">Delete</a></p>';
$('#addedRows').append(recRow);
}
function removeRow(removeNum) {
$('#rowCount'+removeNum).remove();
}
</script>
</head>
<body>
<form:form action="save" method="GET" modelAttribute="DynamicRowForm">
<input type="button" onclick="addMoreRows(this.form);" value="AddRow">
<table rules="all" style="background:#fff;">
<tr>
<td style="font-size:14px;" >Name</td>
<td style="font-size:14px;">Email</td>
<td style="font-size:14px;">Mobile</td>
<!-- <td><span style="font:normal 12px agency, arial; color:blue; text-decoration:underline; cursor:pointer;" onclick="addMoreRows(this.form);">
Add More
</span>
</td> -->
</tr>
<tr id="rowId">
<td><form:input path="${dynamicRow.id}" type="" size="17%"/></td>
<td><form:input path="${dynamicRow.name}" type="text" /></td>
<td><form:input path="${dynamicRow.email}" type="text" /></td>
</table>
<div id="addedRows"></div>
<input type="submit" value="Save">
</form:form>
</body>
我知道以前曾经问过这些问题,但是对于春天的mvc和学习东西来说这是非常新的,所以我试图在这项技术中获得一些安慰。
无论如何,这里我要做的是保存多个行/列表的对象......但它没有保存在列表中...请帮我解决我在做什么错误,并纠正我
修改 还有一件事我想澄清一下,在我的第一个控制器中创建一个dynamicRowForm对象并添加到模型中以便我的jsp页面可以访问它...并且在我的第二个控制器中我使用同名的@ModelAttribute接收DynamicRowForm对象。但是这里有不同的对象。为什么?
答案 0 :(得分:3)
您的输入需要如下所示:
<form:form action="save" method="POST" modelAttribute="DynamicRowForm">
...
<td><form:input path="dynamicRow[0].id" type="text" /></td>
<td><form:input path="dynamicRow[0].name" type="text" /></td>
<td><form:input path="dynamicRow[0].email" type="text" /></td>
...
</form:form>
本质上表明:在表单提交时,将id字段绑定到索引0处的DynamicRow,形式为支持Object - DynamicRowForm。
如果这样做,则以下内容应打印输入值:
@RequestMapping(value="/save")
public String showList(@ModelAttribute DynamicRowForm dynamicRowForm) {
System.out.println(dynamicRowForm.getDynamicRow().get(0).getId());
System.out.println(dynamicRowForm.getDynamicRow().get(0).getName());
System.out.println(dynamicRowForm.getDynamicRow().get(0).getEmail());
return "success";
}
还有一件事我想在第一个控制器中澄清一下 创建一个dynamicRowForm对象并添加到模型中以便我的jsp 页面可以访问它...并在我的第二个控制器中接收 DynamicRowForm对象使用@ModelAttribute同名。但在这里 我得到了不同的对象。为什么?
因为它是无国籍的。如果要使用同一实例,则需要将其存储在请求之间的会话中。请参阅以下有用的讨论。
http://www.intertech.com/Blog/understanding-spring-mvc-model-and-session-attributes/
答案 1 :(得分:1)
您在使用集合时缺少索引。尝试...
<form:input path="${DynamicRowForm.dynamicRow[0].id}" type="" size="17%"/>
并且在你的addRow()中,你必须使用带有行数的动态索引。如果它不能与form:input
一起使用,请尝试使用简单的html输入类型。