Forms 使用thymeleaf获取对象列表
我试图用thymeleaf得到一种形式的值。表单是一个表,其中有多个表示CallDataRecord的一行。我正在寻找的行为是获取包含每个元素列表的CallDataRecord 这是我的控制器:Forms 使用thymeleaf获取对象列表,forms,jsp,spring-mvc,thymeleaf,Forms,Jsp,Spring Mvc,Thymeleaf,我试图用thymeleaf得到一种形式的值。表单是一个表,其中有多个表示CallDataRecord的一行。我正在寻找的行为是获取包含每个元素列表的CallDataRecord 这是我的控制器: @RequestMapping(value="/usage", method=RequestMethod.POST) public ModelAndView usageSubmit(@ModelAttribute CallDataRecord cdr, ModelAndView mav) { S
@RequestMapping(value="/usage", method=RequestMethod.POST)
public ModelAndView usageSubmit(@ModelAttribute CallDataRecord cdr, ModelAndView mav) {
System.out.println(cdr.getRecords().size());
return mav;
}
对象源:
public class CallDataRecord {
private ArrayList<CallDataRecordLine> records;
...
}
public class CallDataRecordLine {
String chargedQuantity;
String fromNumber;
String toNumber;
String dt;
String usage;
}
public类CallDataRecord{
私人ArrayList记录;
...
}
公共类CallDataRecordLine{
字符串计费数量;
字符串fromNumber;
字符串编号;
字符串dt;
字符串用法;
}
和我的相关jSP
<form action="#" th:action="@{/usage}" th:object="${cdr}" method="post">
<tr id='addr0'>
<th:block th:each="calldatarecordline : ${cdr.records}">
<td>1</td>
<td><input type="text" th:field="${calldatarecordline.fromNumber}" name='fromNumber'
placeholder='+555...' class="form-control" /></td>
<td><input type="text" name='toNumber' th:field="${calldatarecordline.toNumber}" placeholder='+555...'
class="form-control" /></td>
<td>
<div class='input-group date'>
<input name='date' type="text" th:field="${calldatarecordline.dt}" class="form-control"><span
class="input-group-addon"><i
class="glyphicon glyphicon-th"></i></span>
</div>
</td>
<td><input type="text" name='duration' th:field="${calldatarecordline.usage}" class="form-control" /></td>
<td><select class="form-control" name='usageType'>
<option value="value1">Message</option>
<option value="value2">Data</option>
<option value="value3">Call</option>
</select></td>
</th:block>
</tr>
</form>
1.
消息
资料
呼叫
最后,我获取了我的CallDataRecord,其中的列表是实例化的,但为空,因此它不能按预期工作。
我尝试在另一个JSP中只检索一个CallDataRecordLine,它工作正常。所以问题是列表上的迭代
感谢您抽出时间来以下几件事:
<form action="#" th:action="@{/usage}" th:object="${cdr}" method="post">
<table id='addr0'>
<tr th:each="calldatarecordline : ${cdr.records}">
<td>1</td>
<td>
<input type="text" th:field="*{fromNumber}" name='fromNumber'
placeholder='+555...' class="form-control"/>
</td>
<td>
<input type="text" name='toNumber' th:field="*{toNumber}"
placeholder='+555...' class="form-control"/>
</td>
<td>
<div class='input-group date'>
<input name='date' type="text" th:field="*{dt}" class="form-control">
<span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span>
</div>
</td>
<td><input type="text" name='duration' th:field="*{usage}" class="form-control"/></td>
<td>
<select class="form-control" name='usageType'>
<option value="value1">Message</option>
<option value="value2">Data</option>
<option value="value3">Call</option>
</select>
</td>
</tr>
</table>
</form>
1.
消息
资料
呼叫
1。th:字段是列是的,它将表示我的CallDataRecordLine的属性。我要寻找的是,对于每个(嵌套在中)我想要创建一个新的CallDataRecordLine,它将通过对象th:object=“${cdr}”传递。该对象是一个包含列表的CallDataRecord。2.我试图用新语法更新代码,但最终还是得到了一个空列表。我认为我的错误可能是在th:object或th:each的声明中。当我将对象切换到CallDataRecordLine时,它工作了,我将其传递到构造函数并获取输入值。当我查找CallDataRecord时,它会通过构造函数,因此我得到一个列表,但它从未传递到CallDataRecordLine构造函数中。因此,我有一个空列表。好的,我重写了你的表单,以便能够创建数据行,尝试一下,让我知道。谢谢,我更新了表单,但最终还是得到了一个空列表。再次在调试模式下,我将进入CallDataRecord的构造函数,但决不在CallDataRecordLine的构造函数中…您所问的控制器是您用来调用此代码的控制器吗?