Проблема привязки автозаполнения списка к форме Spring MVC - PullRequest
1 голос
/ 07 сентября 2011

У меня проблема с привязкой списка автозаполнения к форме для обновления данных.Я смог сохранить данные, используя список автозаполнения.

Вот модель поддержки формы.

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>

Приведенный выше код работал отлично, когда я первоначально сохранил данные.Но теперь, когда пользователь хочет обновить ранее сохраненные данные, я не могу связать список автозаполнения с 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

1 Ответ

1 голос
/ 29 сентября 2011

Удалите «shotToUpdate».Ключевое слово из атрибута PATH.Вы уже указали имя объекта команды, поэтому атрибуты PATH должны соответствовать объекту команды.

...