这是我的模特课
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";
}
这是名为test 2的jsp页面
<%@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>
我知道这些问题以前有人问过,但是由于我对Spring MVC和学习东西很陌生,所以我试图在这种技术中得到一些安慰。
无论如何,我在这里尝试做的是保存对象的多行/列表...但它没有得到保存在列表中...请帮助我出什么是错误的我做的,并纠正我。
编辑还有一件事我想澄清一下,在我的第一个控制器中,我创建了一个dynamicRowForm对象,并添加到模型中,以便我的jsp页面可以访问它...在我的第二个控制器中,我使用相同名称的@ModelAttribute接收DynamicRowForm对象...但这里得到了不同的对象。为什么?
3条答案
按热度按时间pdtvr36n1#
您的输入需要如下所示:
基本上是这样说的:在表单提交时,将id字段绑定到支持Object - DynamicRowForm的表单中索引0处的DynamicRow。
如果您这样做,则以下代码应打印输入的值:
还有一件事我想澄清一下,在我的第一个控制器中,我创建了一个dynamicRowForm对象,并添加到模型中,以便我的jsp页面可以访问它...在我的第二个控制器中,我使用同名的@ModelAttribute接收DynamicRowForm对象...但这里得到了不同的对象。为什么?
因为它是无状态的。如果你想使用相同的示例,你需要在请求之间的会话中存储它。参见下面有用的讨论。
http://www.intertech.com/Blog/understanding-spring-mvc-model-and-session-attributes/
jw5wzhpr2#
您正在使用集合,因此此处缺少索引。请尝试...
在addRow()中,你必须使用动态索引和行计数。如果它不适用于
form:input
,尝试简单的html输入类型。mec1mxoz3#