jsp - 使用 c :foreach "items" variable in path attribute of Spring form:checkbox 时出现 NotReadablePropertyException

标签 jsp spring-mvc

背景 - 根据给定的过滤条件 (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/

相关文章:

java - 过滤器如何处理 session

java - 我想提高 xslt 的性能

java - Barebonds Hello World 安全示例

java - 创建名称为 'sessionFactory' 的 bean 时出错无法实例化默认 tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

java - 无法让 Ajax 工作。这与附加的配置有关吗?

java - Spring表单将空模型对象发送到数据库

java - 用户注册表单 Spring MVC

html - 如何生成自动页脚而不必在我创建的每个新 jsp 页面中隐式定义页脚?

java - JSP 页面未向我的数据库添加值

java - 在 Tomcat 上安装游戏。新人在这里