背景 - 根据给定的过滤条件 (SearchCriteriaForm) 填充的数据网格(ServiceOfferedForm 列表)。此外,每个数据行都有一个绑定(bind)到 ServiceOfferedForm 的 ID 字段的单选按钮,该单选按钮将填充在“selectedService”的 serviceCode 字段中,用于编辑操作。
我有一个如下所示的模型,带有 getter 和 setter(此处未显示)-
public class ServiceOfferedForm implements Serializable{
private String serviceCode;
private String serviceName;
private Boolean monday;
private Boolean tuesday;
private Boolean wednesday;
private Boolean thursday;
private Boolean friday;
private Boolean saturday;
private Boolean sunday;
在 Controller 类中 -
@RequestMapping(value="/services.html", method=RequestMethod.GET)
public String initManageServices(Model model){
ArrayList<ServiceOfferedForm> services = /*Code to fetch from database*/
model.addAttribute("servicesOffered",services);
//Adding other required attributes to model
model.addAttribute("searchCriteria",new SearchCriteriaForm());
model.addAttribute("selectedService",new ServiceOfferedForm());
return "services";
}
在我的 services.jsp 中,我有 2 个表单 - 一个用于网格过滤器,另一个用于编辑网格中选定的行(将打开一个新屏幕进行编辑)
表格 1
<form:form id="filterUsersForm" method="post" action="services.html" modelAttribute="searchCriteria">
/*some code here */
<input type="submit"..>
</form:form>
表格2
<form:form id="selectSvcFromGrid" method="get" action="editService" modelAttribute="selectedService" >
//Some code here for table header for grid
<c:forEach var="service" items="${servicesOffered}" varStatus="row">
<tr>
<td><form:checkbox path="servicesOffered[${row.index}].monday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].tuesday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].wednesday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].thursday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].friday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].saturday" disabled="true"/></td>
<td><form:checkbox path="servicesOffered[${row.index}].sunday" disabled="true"/></td>
</tr>
</c:forEach>
它给出了org.springframework.beans.NotReadablePropertyException:bean类[com.tfts.form.ServiceOfferedForm]的无效属性'servicesOffered [0]':
看起来它正在尝试在为 Form-2 指定的 modelAttribute“selectedService”中查找属性,该属性是 ServiceOfferedForm 的实例。但这不是我想要的。 非常感谢有关如何解决此问题的建议!
最佳答案
<form:form>
期望在单个“命令”对象(由modelAttribute
属性指定)上工作,并且路径都是相对于该对象的。
创建一个简单的包装对象来包含您的服务列表:
public class ServicesOfferedForm {
private List<ServiceOfferedForm> servicesOffered;
public ServicesOfferedForm(List<ServiceOfferedForm> servicesOffered) {
this.servicesOffered = servicesOffered;
}
public List<ServiceOfferedForm> getServicesOffered() {
return servicesOffered;
}
public void setServicesOffered(List<ServiceOfferedForm> servicesOffered) {
this.servicesOffered = servicesOffered;
}
}
并将包装器添加到模型中:
model.addAttribute("selectedService", new ServicesOfferedForm(services));
然后,您的 JSP 应该按预期工作,无需修改,但您也可以删除单独的 servicesOffered
model 属性并将 JSP 循环更改为:
<c:forEach var="service" items="${selectedService.servicesOffered}" varStatus="row">
(请注意,首先问题不是 forEach
- 如果您没有 forEach
但尝试过 path="servicesOffered[0].monday"
,您也会遇到同样的问题)
关于jsp - 使用 c :foreach "items" variable in path attribute of Spring form:checkbox 时出现 NotReadablePropertyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665916/