Niall Pemberton a écrit :
Its hard to help when all you say is "failed to make their examples work".
Posting snippets of relevant bits of your struts-config.xml, jsp etc would
help along with what actually happened.

Sorry for the lack of details, I know I was really too vague.

I am using Struts 1.2.4 .

So, here is what I want to do :
I have a list of text fields which number is unknown when the user gets to the JSP. Fields are added dynamically through JavaScript.


Now, I know there is Struts 1.2.6 on its way, but I can't wait for it to get a "stable" label.

So here is the example I was trying to follow (extracted from http://wiki.apache.org/struts/StrutsCatalogLazyList) :

[quote]
In fact using Arrays (rather than Lists) a LazyDynaBean can be used directly, in the following way:


  <form-beans>

     <form-bean name="skillForm"
                type="org.apache.commons.beanutils.LazyDynaBean">
        <form-property name="skills" type="myPackage.SkillBean[]"/>
     </form-bean>

  </form-beans>
[/quote]

Supposedly, the LazyDynaBean object should be wrapped within a BeanValidatorForm one.

Here is what I am using in my struts-config.xml file :

      <form-bean name="dynaLazyForm"
                 type="org.apache.commons.beanutils.LazyDynaBean">
        <form-property name="nb" type="java.lang.String" />
        <form-property  name="persons"     
                        type="net.beuarh.lasher.Person[]"/>
      </form-bean>

The class Person is really just a bean, with deux properties : name and fname.

Here is the JavaScript code I use to generate new text fields :

function foo() {
        var nb = document.getElementById('nb').value;
        var f = document.getElementById('f');
        f.innerHTML = null;
        f.innerHTML = "nb: "+
                "<input type='text' id='nb' value='"+nb+"' /><br />";
        for (var i = 0; i < nb; i++) {
                f.innerHTML += "name: <input type='text' " +
                      "name='persons["+i+"].name' id='name' /><br />";
                f.innerHTML += "first name:<input type='text' " +
                      "name='persons["+i+"].fname' id='fname' /><br />";
        }
        f.innerHTML += "<input type='submit' value='submit' />";
}

The JSP is really basic (since this is a test) :

<html>
  <head>
    <html:base/>
    <title>JSP for lazyForm form</title>
    <script src="js.js" language="javascript"
            type="text/javascript"></script>
  </head>
  <body>
    <html:errors/>
    <html:form action="/dynaLazy" styleId="f">
      nb : <html:text property="nb" onblur="foo()" styleId="nb"/>
      <br />
      <html:submit/>
    </html:form>
  </body>
</html>

... And my Action class is as simple as the JSP :

public final class DynaLazyAction extends Action {
        public ActionForward execute(...) {
                DynaValidatorForm dynaForm = (DynaValidatorForm) form;
                // here is the line that makes it all crumble...
                Person[] persons = (Person[]) dynaForm.get("persons");

                request.setAttribute("persons",persons);
                return mapping.findForward("ok");
        }
}

As I said before, when it is about "manual" forms, everything's fine, I use LazyLists, and it works (thank you so much, Rick; you made my morning wonderful :-) ).

I hope I wasn't too messy in my explanations ...

Thanks for any clue you might give me :-)

--
Stéphane Zuckerman

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to