Got it working.

In haste when building my example I decided to 'save time' by creating
my Person class as an inner class to my ActionBean (I also failed to
mention this too you apologies) but thanks to my lack of understanding
on innerclass instantiation I did not release this would cause any
problems. So when the DefaultActionBeanPropertyBinder attempts to
instantiate the Person object it fails as is not using the public
inner class syntax:

 ExampleActionBean actionBean = new ExampleActionBean();
 ExampleActionBean.Person person = actionBean.new Person();

 I believe this is what is happening. Maybe an enhancement could be
made to Stripes to handle this situation but too be fair it's a rare
sceanrio.

Cheers,
Phil



On Fri, Mar 5, 2010 at 6:28 PM, Freddy Daoud <xf2...@fastmail.fm> wrote:
> 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&#174; 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
>

------------------------------------------------------------------------------
Download Intel&#174; 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

Reply via email to