Here's some stuff that might be relevant if you want to use a ListView inside a form: http://wicketinaction.com/2008/10/building-a-listeditor-form-component/
A quote from the page "A common question on Wicket mailing lists is “Why doesn’t my ListView work as expected in a Form?”. There can be many possible answers, but the core issue is that ListView was never designed to work as a form component" br, Juha On Fri, Aug 14, 2009 at 2:14 AM, Dane Laverty<danelave...@gmail.com> wrote: > In case anyone else ends up with a similar error, here's the solution I > ended up using. (Yes, I'm sure it's an awful hack, but right now it works > for me.) > > First, I swapped the Set/List implementation I was using in Employer Info > [1], since I realized that the items affected in my previously generated > List weren't getting passed back to the Set. Then I passed my ListView the > list directly, rather than wrapped in a model [2]. The AjaxSubmitLink adds > to that list, by way of the ListView's model [3]. Then, when the user wanted > to save the updated List, I had to explicitly re-set it in the Form model > [4]. > > That resolved my IndexOutOfBoundsException issue. However, when I tried to > persist the list, I got an org.hibernate.NonUniqueObjectException. This is > my first Hibernate/Wicket project, so I'm pretty clueless about that one. > Searching the list, I found a post by Eelco [5] that mentioned using > Hibernate's Session.evict(), so I implemented that in the persist function > of the DAO [6]. Now it appears to be working! > > ------ > > [1] - public class EmployerInfo extends PersonInfoImpl { > ... > List<ContactPoint> contactPointsList; > > public List<ContactPoint> getContactPoints() { > return contactPointsList; > } > > public void setContactPoints(List<ContactPoint> contactPointsList) { > this.contactPointsList = contactPointsList; > } > > public Set<ContactPoint> getContactPointsSet() { > return new HashSet<ContactPoint>(contactPointsList); > } > > public void setContactPointsSet(Set<ContactPoint> contactPointsSet) { > List<ContactPoint> list = new > ArrayList<ContactPoint>(contactPointsSet); > Collections.sort(list); > contactPointsList = list; > } > } > > > > [2] - final ListView<ContactPoint> contactPointsListView = new > ListView<ContactPoint>("contactPoints", > employerInfoModel.getObject().getContactPoints()) {...}; > > > [3] - new AjaxSubmitLink("addContactLink", this) { > �...@override > public void onSubmit(AjaxRequestTarget target, Form<?> form) > { > contactPointsListView.getModelObject().add(new > ContactPointImpl()); > target.addComponent(contactPointsContainer); > } > > > [4] - new SubmitLink("saveContactPoints") { > �...@override > public void onSubmit() { > super.onSubmit(); > > employerInfoModel.getObject().setContactPoints(contactPointsListView.getModelObject()); > > personInfoDao.persistOrMerge(employerInfoModel.getObject()); > info("Your account has been updated."); > } > > [5] - http://www.nabble.com/delete-onSubmit-td22839614.html#a22839614 > > [6] - public void persistOrMerge(PersonInfo personInfo) { > getHibernateTemplate().evict(personInfo); > try { > getHibernateTemplate().saveOrUpdate(personInfo); > } catch (Exception e) { > getHibernateTemplate().merge(personInfo); > } > } > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org