Удаление элемента из индексированного свойства - вопрос JavaBeans
Я работаю с индексированными свойствами (используя Struts и Java/ JSP). У нас есть динамическая таблица, которая может добавлять / удалять строки / элементы в таблице. Добавление строк работает по назначению - я вижу новые строки в форме в классе действия. Удаленные строки не устанавливаются (очевидно), но они также не удаляются из списка. Я реализовал методы void setItem(List), void setItem(index), Item getItem(index) и List getItem(). Я не могу найти много информации о поведении проиндексированных свойств. Есть ли способ сброса, который мне нужно реализовать, или индексированные свойства должны позаботиться о создании нового списка? Из того, что я могу сказать, устанавливаются только элементы, все еще находящиеся в списке, и они устанавливаются с помощью метода void setItem(Item).
1 ответ
- Убедитесь, что ваша форма не ограничена областью запроса
- Используйте LazyList.
Например:
private List<PropertyContact> contactsList = LazyList.decorate(new ArrayList<PropertyContact>(), PropertyContact.PROPERTY_CONTACT_FACTORY);
public static final Factory PROPERTY_CONTACT_FACTORY = new Factory() {
@Override
public Object create() {
return new PropertyContact();
}
};
Затем вы можете отобразить / отредактировать список в вашем JSP следующим образом:
<c:forEach items="${profileForm.contactsList}" var="contact" varStatus="contactSta">
<html:hidden styleClass="contact-id" property="contactsList[${contactSta.index}].id"/>
</c:forEach>
Если вы хотите добавить элементы в список, убедитесь, что вы установили индекс выше максимального. Например, если мой список содержит 3 элемента, новый (четвертый) будет выглядеть так: (помните, что список основан на нулевом индексе)
<input style="hidden" styleClass="contact-id" property="contactsList[3].id"/>
Когда форма отправлена, любой удаленный элемент списка будет иметь нулевое значение по указанному индексу. Например, допустим, пользователь удаляет 2-е элементы, которые я увижу на сервере:
contactsList.get(1) == null;//remember that list are zero-index based