2011-09-07 1 views
1

J'ai un problème lié à la liste AutoPupulating dans un formulaire pour mettre à jour les données. J'ai pu enregistrer les données en utilisant la liste Autopopulating.Problème de la liste de regroupement des liens vers un formulaire Printemps MVC

Voici le modèle de support de formulaire.

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; 
} 

-------- 

}

Où itemNumClors est un modèle simple

public class ItemNumColor { 

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

------get and set methods  

}

Quand je sauvegarde des données, selon le nombre ItemColors l'utilisateur voulait, en utilisant jquery I ajouté les champs d'entrée dynamiquement comme indiqué dans le code suivant.

<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> 

Le code ci-dessus a parfaitement fonctionné lors de la première sauvegarde des données. Mais maintenant, lorsque l'utilisateur veut mettre à jour les données enregistrées précédemment, je suis incapable de lier la liste Autopopulating à la JSP. Voici comment je le fais.

<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> 

Lorsque j'ouvre l'édition JSP, je reçois le moment de l'exécution suivante exception

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) 

Je ne sais pas pourquoi je ne suis pas en mesure de lier l'objet de cette façon à la forme depuis ma forme soutien l'objet ne possède une liste Autopopulating que j'initialisés dans le contrôleur avant de charger ce formulaire

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()); 

Toute aide est grandement appréciée.

Merci, Shravanthi

+0

Quelle version de ressort utilisez-vous? – anoop

Répondre

1

Retirez le 'shotToUpdate.' mot-clé de l'attribut PATH. Vous avez déjà spécifié le nom de l'objet de commande afin que les attributs PATH soient relatifs à l'objet de commande.

Questions connexes