2011-09-07 93 views
1

我有一个问题在表单中绑定自动填充列表来更新数据。尽管我能够使用自动填充列表保存数据。问题将自动填充列表绑定到表单Spring MVC

这是表单支持模型。

public class AddUpdateShot { 

private Integer shootId; 
private char shotSelect; 
private String shotNotes; 
private Integer numOfItems; 
private AutoPopulatingList itemNumColors; 
private Integer totalNumOfItems; 
private String shotName; 

---------- 

public void setItemNumColors(AutoPopulatingList itemNumColors){ 
    this.itemNumColors = itemNumColors; 
} 

public AutoPopulatingList getItemNumColors(){ 
    return this.itemNumColors; 
} 

-------- 

}

凡itemNumClors是一个简单的模型

public class ItemNumColor { 

private Integer id; 
private Integer itemNum; 
private String itemName; 
private String colorCode; 
private String colorName; 

------get and set methods  

}

当我第一次保存的数据,这取决于有多少ItemColors用户想要的,使用jQuery我加动态地输入字段,如下面的代码所示。

<form:form id="createShootForm" method="POST" 
      commandName="createShoot"> 
<tr> 
<td align="left"><label for="shootName">*Shoot Name:</label></td> 
<td><form:input id="shootName" class="required" path="shootName" /></td> 
</tr> 
------- other input fields in form backing obj---- 

<c:forEach var="i" begin="${start}" end="${end-1}" step="1" varStatus="status"> 
<tr> 
    <td align="left"><label for="itemNumber${i}">Item 
      Number${i+1}:</label></td> 
    <td><form:input id="itemNumber${i}" 
      path="createShoot.itemNumColors[${i}].itemNum" /></td> 
    <td><form:select id="color${i}" 
      path="createShoot.itemNumColors[${i}].colorCode"> 
      <form:option value="" label="Color" /> 
     </form:select> 
    </td> 
</tr> 
</c:forEach> 
<tr id="submitRow"> 
<td></td> 
<td></td> 
<td align="right"><input name="submit" type="submit" value="Next" /></td> 
</tr> 
</table> 
</form:form> 

上面的代码在我最初保存数据时工作得很好。但是现在,当用户想要更新早先保存的数据时,我无法将Autopopulating列表绑定到JSP。这是怎么做的。

<form:form id="updateShotForm" method="POST" 
      commandName="shotToUpdate"> 
----other input fields of form backing object--- 
<c:forEach var="i" begin="0" end="${totalNumOfItems-1}" step="1" 
        varStatus="status"> 
<tr><td align="left"><label for="itemNumber${i}">ItemNumber${i+1}:</label></td> 
<td><form:input id="itemNumber${i}"path="shotToUpdate.itemNumColors[${i}].itemNum" /></td> 
</tr> 
</c:forEach> 
<tr id="submitRow"> 
<td></td> 
<td></td> 
<td align="right"><input name="submit" type="submit" 
         value="Next" /> 
</td> 
</table> 
</form:form> 

当我打开编辑JSP,我得到以下运行时异常

Sep 7, 2011 10:38:00 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [jalapeno] in context with path [/OnLocation] threw exception [An exception occurred processing JSP page /WEB-INF/views/app/updateShot.jsp at line 256 

253: <tr> 
254: <td align="left"><label for="itemNumber${i}">Item 
255:    Number${i+1}:</label></td> 
256: <td><form:input id="itemNumber${i}" 
257:  path="shotToUpdate.itemNumColors[${i}].itemNum" /></td> 
258: <td><form:select id="color${i}" 
259:  path="shotToUpdate.itemNumColors[${i}].colorCode"> 

Stacktrace:] with root cause 
org.springframework.beans.NotReadablePropertyException: Invalid property 'shotToUpdate' of bean class [com.jcrew.jalapeno.app.model.AddUpdateShot]: Bean property 'shotToUpdate' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter? 
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:707) 
at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:555) 
at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:532) 
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:697) 
at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:98) 
at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:224) 
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:174) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:194) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:160) 
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:123) 
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:408) 
at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140) 
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102) 

我不知道为什么我不能够对象这样的形式结合,因为我的表单支持对象确实有一个自动填充列表,我在控制器中初始化之前加载此表格

AutoPopulatingList itemNumColors = new AutoPopulatingList(ItemNumColor.class); 

    for(OnLocShotItemNumber onLocItemNumColor : itemNumColorsList){ 
     ItemNumColor itemColor = new ItemNumColor(); 
     itemColor.setId(onLocItemNumColor.getId()); 
     itemColor.setColorCode(onLocItemNumColor.getItemColorCode()); 
     itemColor.setItemNum(onLocItemNumColor.getItemNumber()); 
     itemNumColors.add(itemColor); 
    } 

    shotToUpdate.setItemNumColors(itemNumColors); 

model.put("shotToUpdate", shotToUpdate); 
model.put("totalNumOfItems", itemNumColorsList.size()); 

任何帮助,非常感谢。

感谢, Shravanthi

+0

你正在使用哪个春季版本? – anoop

回答

1

删除 'shotToUpdate。'关键字来自PATH属性。您已经指定了命令对象名称,因此PATH属性应该与命令对象相关。