我正在尝试将值从前端映射到Back Bean,这是一个List。现在的问题是,Spring控制器不显示页面/视图,它是由CMS(内容管理系统)显示的jsp。所以我不能初始化List并向其添加元素并作为模式属性传递
这就是我的bean看起来的样子
public class LodgingAvailabilityRequest implements Serializable
{
private List<GuestCount> guestCounts = new ArrayList<GuestCount>();
public List<GuestCount> getGuestCounts() {
return guestCounts;
}
public void setGuestCounts(List<GuestCount> guestCounts) {
this.guestCounts = guestCounts;
}
并且GuestCount具有计数字段
public class GuestCount implements Serializable
{
private Double count;
这就是我的JSP的样子
<jsp:useBean id="lodgingAvailability" class="com.pegasus.gen.LodgingAvailabilityRequest" scope="request"/>
<jsp:useBean id="guestCount" class="com.pegasus.gen.GuestCount" scope="request"/>
<body>
<form:form method="POST" action="/lodgingbyroom" modelAttribute="lodgingAvailability">
<table>
<tr>
<td>Count: <form:input path=guestCounts[0].count /></td>
</tr>
<td><input type="submit" value="Submit lodgingAvailability request by ROOM type"/></td>
</tr>
</table>
</form:form>
现在使用上面的代码给出了Array Out of Bounds异常,所以我尝试了其他一些帖子中提到的一些东西
<td>Count: <form:input path="${guestCounts[0].count}" /></td>
我没有收到任何编译错误,但控制器中的vaue未映射。列表是空的。
<c:forEach items="${lodgingAvailability.guestCounts}" varStatus="counter">
<tr>
<td>Count: <form:input path="guestCounts[${counter.index}].count" /></td>
</tr>
</c:forEach>
&#13;
这是我的控制器的外观,表单提交的位置
@RequestMapping(value = "/lodgingbyroom", method = RequestMethod.POST)
public String lodgingAvailabilityByRoom(ModelMap model, LodgingAvailabilityRequest request,
RedirectAttributes redirectAttributes) {
final RestTemplate restTemplate = new RestTemplate();
final Map<String, List<DXARoom>> groupByRoom = restTemplate
.postForEntity(pegasusPath + "/lodgingbyroom", request, Map.class).getBody();
redirectAttributes.addFlashAttribute("pegasusResponse", groupByRoom);
}
答案 0 :(得分:0)
我能解决上述问题。由于列表中没有任何元素,使其工作的唯一方法是添加一个虚拟元素列表。因此,您可以遍历列表,然后映射值
&lt;%lodgingAvailability.getGuestCounts()。add(guestCount);%&gt;
<% lodgingAvailability.getGuestCounts().add(guestCount) ;%>
<c:forEach items="${lodgingAvailability.guestCounts}" varStatus="counter">
<tr>
<td>Count: <form:input path="guestCounts[${counter.index}].count" /></td>
</tr>
</c:forEach>
要使这段代码工作,请确保声明bean
<jsp:useBean id="lodgingAvailability" class="com.pegasus.gen.LodgingAvailabilityRequest" scope="request"/>
<jsp:useBean id="guestCount" class="com.pegasus.gen.GuestCount" scope="request"/>