如何显示从Controller发送的选定值作为对象列表?

时间:2017-03-30 08:32:21

标签: java jsp spring-mvc arraylist

AddTruck.jsp 页面形式如下:

    <form:form method="post" modelAttribute="truckDto" action="myController">

       <form:checkbox path="operatingDays[0].weekDays" 
value="MONDAY" class="weekday" id="weekday-mon"/>

       <form:checkbox path="operatingDays[1].weekDays" 
value="TUESDAY" class="weekday" id="weekday-tue"/>

//同样是一周的所有日子,直到星期日,operatingDays的索引一直在递增,直到一周结束。

TruckDto 具有ArrayList对象的以下属性:

private List<TruckOperatingDays> operatingDays = new ArrayList<TruckOperatingDays>();
//getter setter below

TruckOperatingDays POJO的getter-setter方法具有以下属性:

@Enumerated(EnumType.STRING)
    @Column(name = "week_days")
    private WeekDaysEnum weekDays;

    @Column(name = "opening_hours")
    private String openingHours;

    @Column(name = "closing_hours")
    private String closingHours;

当我提交表单时,我会根据需要在控制器中获取值,并且可以将值保存到我的数据库中而没有任何问题。问题出在“编辑”时间。 当我打开此页面以编辑先前在数据库中保存的值时,由于operatingDays的索引位置在表单中是静态的并且ArrayList从中传递,因此我无法选中已选中的复选框controller不会将值设置为表单中的输入字段/复选框。

请注意,我无法使用JSTL foreach循环生成ArrayList中的表单字段,因为我还需要在星期一,星期二等时间显示标签。

我的表单字段是否可以通过我的DTO proeprties自动绑定,就像我们可以绑定简单的输入字段一样没有问题?

1 个答案:

答案 0 :(得分:0)

您仍然可以使用JSTL,只需添加一个额外的列表来存储工作日(注意:此示例假定您的ArrayList返回所有7天但有些天可能为空(未选中))。

<%
    String[] days = new String[]{ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" };
pageContext.setAttribute("wDays", days);
    %>
//and then use JSTL
<c:forEach items=${operatingDays} var="day", varStatus="counter">
   <form:checkbox path=${day.weekDays}
   value=${wDays[counter]} class="weekday" id="weekday-mon"/>
</c:forEach>

如果您想避免使用scriptlet,可以使用&lt; c:set&gt;在您的JSP页面中填充工作日列表或只填充Java代码中的日期列表(而不是在JSP中)