Jsp 使用c:foreach的NotReadablePropertyException;项目“;Spring窗体的路径属性中的变量:复选框

Jsp 使用c:foreach的NotReadablePropertyException;项目“;Spring窗体的路径属性中的变量:复选框,jsp,spring-mvc,Jsp,Spring Mvc,背景-基于给定筛选条件(SearchCriteriaForm)填充的数据网格(ServiceOfferedForm列表)。此外,每个数据行都有一个单选按钮绑定到ServiceOfferedForm的ID字段,该字段将填充在“selectedService”的serviceCode字段中,用于编辑操作 我有一个如下的模型,带有getter和setter(此处未显示)- 在控制器类中- @RequestMapping(value="/services.html", method=RequestMet

背景-基于给定筛选条件(SearchCriteriaForm)填充的数据网格(ServiceOfferedForm列表)。此外,每个数据行都有一个单选按钮绑定到ServiceOfferedForm的ID字段,该字段将填充在“selectedService”的serviceCode字段中,用于编辑操作

我有一个如下的模型,带有getter和setter(此处未显示)-

在控制器类中-

@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";
}
@RequestMapping(value=“/services.html”,method=RequestMethod.GET)
公共字符串initManageServices(模型){
ArrayList services=/*从数据库获取的代码*/
model.addAttribute(“servicesOffered”,services);
//向模型添加其他必需属性
addAttribute(“searchCriteria”,新的SearchCriteriaForm());
model.addAttribute(“selectedService”,newServiceOfferedForm());
返回“服务”;
}
在myservices.jsp中,我有两个表单——一个用于网格过滤器,另一个用于编辑网格中选定的行(将打开一个新屏幕进行编辑)

表格一

 <form:form id="filterUsersForm" method="post" action="services.html" modelAttribute="searchCriteria">
    /*some code here */
   <input type="submit"..>
</form:form>

/*这里有一些代码*/
表格二

    <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的实例。但这不是我想要的。 非常感谢关于如何解决此问题的建议

需要处理单个“命令”对象(由
modeldattribute
属性指定),并且路径都与此对象相关

创建一个简单的包装器对象以包含服务列表:

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;
    }
}
然后,您的JSP应该可以按预期工作,无需修改,但您也可以删除单独的
servicesOffered
model属性,并将JSP循环更改为:

<c:forEach var="service" items="${selectedService.servicesOffered}" varStatus="row">

(请注意,问题首先不是
forEach
——如果您没有
forEach
,但尝试了
path=“servicesofered[0]。星期一”
您也会遇到同样的问题)

model.addAttribute("selectedService", new ServicesOfferedForm(services));
<c:forEach var="service" items="${selectedService.servicesOffered}" varStatus="row">