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

mwg9r5ms  于 2022-12-23  发布在  Spring
关注(0)|答案(3)|浏览(124)

这是我的模特课

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>
 &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>

我知道这些问题以前有人问过,但是由于我对Spring MVC和学习东西很陌生,所以我试图在这种技术中得到一些安慰。
无论如何,我在这里尝试做的是保存对象的多行/列表...但它没有得到保存在列表中...请帮助我出什么是错误的我做的,并纠正我。

编辑还有一件事我想澄清一下,在我的第一个控制器中,我创建了一个dynamicRowForm对象,并添加到模型中,以便我的jsp页面可以访问它...在我的第二个控制器中,我使用相同名称的@ModelAttribute接收DynamicRowForm对象...但这里得到了不同的对象。为什么?

pdtvr36n

pdtvr36n1#

您的输入需要如下所示:

<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字段绑定到支持Object - DynamicRowForm的表单中索引0处的DynamicRow。
如果您这样做,则以下代码应打印输入的值:

@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页面可以访问它...在我的第二个控制器中,我使用同名的@ModelAttribute接收DynamicRowForm对象...但这里得到了不同的对象。为什么?
因为它是无状态的。如果你想使用相同的示例,你需要在请求之间的会话中存储它。参见下面有用的讨论。
http://www.intertech.com/Blog/understanding-spring-mvc-model-and-session-attributes/

jw5wzhpr

jw5wzhpr2#

您正在使用集合,因此此处缺少索引。请尝试...

<form:input path="${DynamicRowForm.dynamicRow[0].id}"  type=""   size="17%"/>

在addRow()中,你必须使用动态索引和行计数。如果它不适用于form:input,尝试简单的html输入类型。

mec1mxoz

mec1mxoz3#

var count=0;
 function addMoreRows(form) {
    rowCount ++;
    count =++count;
    var recRow = '<p id="rowCount'+rowCount+'"><tr><td><input path="users['+count+'].id" id="users'+count+'.id" name="users['+count+'].id" type="" size="17%"  maxlength="120" /></td><td><input path="users['+count+'].name" id="users'+count+'.name" name="users['+count+'].name" type="text"  maxlength="120" style="margin: 4px 5px 0 5px;"/></td><td><input path="users['+count+'].email" id="users'+count+'.email" name="users['+count+'].email" 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);
 }

相关问题