Hi Phil, Just got a working example. Things for you to try out:
* the @ValidateNestedProperties({...}) belongs on the private List<Person> people field, the getter method, or the setter method, not on the event handler; * make sure that you have a public no-args constructor, public Person() {}, in the Person class; * if nothing solves the problem, compare with my code below. -- HomeActionBean.java -- public class HomeActionBean extends BaseActionBean { private List<Person> people; public List<Person> getPeople() { return people; } public void setPeople(List<Person> people) { this.people = people; } @DefaultHandler public Resolution index() { people = new ArrayList<Person>(); people.add(new Person("name1", "email1")); people.add(new Person("name2", "email2")); return new ForwardResolution("/index.jsp"); } public Resolution update() { System.out.println("people: " + people); return new ForwardResolution("/index.jsp"); } } -- index.jsp -- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %> <table> <stripes:form beanclass="example.action.HomeActionBean" method="POST"> <c:forEach items="${actionBean.people}" var="person" varStatus="loop"> <tr> <td><stripes:text name="people[${loop.index}].name" value="${person.name}"/></td> <td><stripes:text name="people[${loop.index}].email" value="${person.email}"/></td> </tr> <c:set var="newIndex" value="${loop.index + 1}" scope="page"/> </c:forEach> <tr> <td><stripes:submit name="update" value="update"/></td> </tr> </stripes:form> </table> -- Person.java -- public class Person { public Person() { } public Person(String name, String email) { setName(name); setEmail(email); } private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } private String email; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return name + " " + email; } } Let me know what you find. Cheers, Freddy - - Sure thing Freddy, actionBean: - - private List<Person> people; - - //called in default 'view' handler method so intial form is - populate with people data that can be updated - public void prepareView(){ - people = new ArrayList<Person>(); - people.add(new Person("tom","t...@...")); - people.add(new Person("harry","ha...@...")); - people.add(new Person("adrian","adr...@...")); - people.add(new Person("julie","ju...@...")); - people.add(new Person("sue","s...@...")); - } - - private List<Person> people; - - @ValidateNestedProperties ({ - @Validate(field="name", required=true, minlength=3, - maxlength=15, on="update"), - @Validate(field="email", required=true - ,mask="[\\w\\...@[\\w\\.]+\\.\\w+", on="update") - }) - @HandlesEvent("update") - public Resolution updatePeople(){ - logger.info("people updated :" + people); - return new RedirectResolution(WelcomeActionBean.class,"view"); - } - - public List<Person> getPeople() { - return people; - } - - public void setPeople(List<Person> people) { - this.people = people; - } - - JSP: - - <stripes:form beanclass="com.orangehome.ui.action.admintools.ExampleActionBean" - method="POST"> - <c:forEach items="${actionBean.people}" var="person" varStatus="loop"- - <tr> - <td><stripes:text name="people[${loop.index}].name" - value="${person.name}"/></td> - <td><stripes:text name="people[${loop.index}].email" - value="${person.email}"/></td> - </tr> - <c:set var="newIndex" value="${loop.index + 1}" scope="page"/- - </c:forEach> - <stripes:submit name="update" value="update"/> - </stripes:form> - - Stripes is falling over in PropertyExpressionEvaluation.java:652, - looks like it's trying to instantiate a primitive (the index) : - - Class clazz = convertToClass(node.getValueType(), node); - - if (clazz.isArray()) { - return Array.newInstance(clazz.getComponentType(), 0); - } - else if (clazz.isEnum()) { - return clazz.getEnumConstants()[0]; - } - else if (clazz.isInterface() ) { - return ReflectUtil.getInterfaceInstance(clazz); - } - else { - return clazz.newInstance(); - } - - Cheers, - Phil ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Stripes-users mailing list Stripes-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/stripes-users