我试图使用spring form
标记库绑定POJO。绑定引用类bean变量后,我收到“Bad Request Error-Http Status 400”。
如果我删除了引用类的绑定,我的表单已成功提交,并且值也会在类中填充。
public class EmployeeTourPojo {
private String empDisplayName;
private List<TourDetailsPojo> tourDetails;
//getter and setter
}
和
public class TourDetailsPojo {
private Date departDate;
private String departTime;
//getters and setters
}
JSP:
<td><form:input path="empDisplayName" class="form-control"/> </td>
<form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/><br/>
我从少数articles获得了引用,但是在我提交JSP之前添加行时,它们正在get请求中加载引用bean列表。
答案 0 :(得分:0)
使用JSTL标记库迭代列表中的数据。
<c:forEach var="tourDetails" items="${tourDetails}" varStatus="status">
<form:input placeholder="Departure Date" path="tourDetails[${status.index}].departDate" required="required" class="datepicker form-control"/><br/>
</c:forEach>
在JSP的开头添加下面的taglib。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
答案 1 :(得分:0)
如果我理解你的问题,这将有助于你
<tr>
标记复制 html 元素,使其成为模板,位于已检查元素右键单击和复制 - &gt; 外部HTML 。
假设生成的HTML元素如下所示
此将转换
... <form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/><br/>
...
类似这个
... <input placeholder="Departure Date" id="tourDetails0.departDate" name="tourDetails[0].departDate" required="required" class="datepicker form-control"/><br/>
...
创建生成的html的模板
var template ='... <input placeholder="Departure Date"
id="tourDetails{INDEX}.departDate" name="tourDetails[{INDEX}].departDate"
required="required" class="datepicker form-control"/><br/>
...';
请参阅我已将0
替换为{INDEX}
点击Add Row
按钮,获取length
的{{1}},用长度替换<tr>
,使用javascript函数
{INDEX}
将generated_template = template.replace(/{INDEX}/g,length);
附加到表格。
希望这会有所帮助......
答案 2 :(得分:0)
我发现问题在于点击“添加行”后递增索引。因此,我添加了以下JQuery代码来增加索引。
$("#addRow").click(function(){
//alert("The button was clicked.");
var addressRow = $('.repeat-address').last();
var addressRowLength = $('.repeat-address').length;
var newAddressRow = addressRow.clone(true).find("input").val("").end();
$(newAddressRow).find("td input,td select").each(function(index,item) {
item.name = item.name.replace(/[0-9]/g,addressRowLength);
});
newAddressRow.insertAfter(addressRow);
});
HTML CODE
<c:set var="index" value="0"/>
<td><form:input path="empDisplayName" class="form-control"/> </td>
<tr class="repeat-address">
<td>Departure Date</td>
<td><form:input placeholder="Departure Date" path="tourDetails[${index}].departDate" required="required" class="datepicker form-control"/></td>
<td>Pincode</td>
<td><input type="text" name="tourDetails[${index}].departDate"/></td>
<td><input type="file" name="tourDetails[${index}].tourTicket"/></td>
</tr>
<tr><td colspan="3"><input id="addRow" type="button" value="Add Row"></td></tr>
因为,我还需要将输入类型文件与POJO绑定。我还添加了一个Multipart字段(在TourDetailsPojo Bean中)作为
private Date departDate;
private Multipart tourTicket;
//getters and setters