试图在spring mvc中创建和保存对象列表

时间:2015-03-09 17:04:15

标签: java spring jsp spring-mvc

这是我的模特课

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>
 &nbsp;
<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对象。但是这里有不同的对象。为什么?

2 个答案:

答案 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输入类型。