That's okay Rajat as I said I know what its like to up against the wire..

I've found ArrayList works better in dynaActionForms especially if you're dynamically generating forms. I think this because its a big fat pain in the arse to create new dynabeans (have a play with bean utils for a day and you find this out).

When setting the size dynamically you need to scope the form to session.

<action path="/myaction" scope="session" ..

I use arraylist as the form property type, i don't think that arrays work but i could be wrong

<form-property name="myprop" type="java.util.ArrayList" />
[notice you dont set the size]

then in your action when your loading the form

ArrayList list = ...

theForm.set("myprop",list);

and also (I guess this shouldn't be required but it is)...

request.setAttribute("myprop",list);

then

<logic:iterate id="prop" name="myForm" property="myprop">
        <html:text name="prop" property="foo" indexed="true" />
</logic:iterate>

I guess you could apply the same principles using non dynamic action form. I imagine that using an array rather than arrayList should work too.

Cheers Mark


On Tuesday, October 28, 2003, at 02:31 AM, Rajat Pandit wrote:


Hello all,
I finally managed to solve the problem, and now that I know it all seems
so damn awfully simple!!! , I wish the docs had explained it in a much
simpler manner. But I guess it was more about the form and ActionForm
thing than about the indexed properties. I am writing a HOWTO on all
possible variations of indexed properties now. Shall post it on the
mailing list for your review.
Thanks a lot nick, for the pointers, it was a great help.


Just one more question, it works just fine if I define it as an
ArrayList, but in case I want to use it as an array, how do I workaround
for the size. One way is to assume a higest upper limit. (which I think
is lame) Is there someone I can inform the actionForm about the last
value of the index of the <logic:iterate.. Tag ... I mean this could
sound rather silly...but just to know is there a possibility?


Thanks again for all ur time. And yes mark! Thanks for all the kick in
the butt!! Helped me think rationally :D


-----Original Message----- From: Rajat Pandit [mailto:[EMAIL PROTECTED] Sent: Sunday, October 26, 2003 9:39 PM To: [EMAIL PROTECTED] Subject: Index properties (once again)


Hello sorry for posting the same question again and again. But I seem to
have gained something on this. Now I have a few (more) questions. Maybe
someone could help me figure out what or where I am getting it wrong.



This is the case. I have a product, with different states(checbox) and each state has to have a bidAmount (text area) and a transaction type(radio button). I want the form to be generated such that for validation.

a. I can check If the checkbox(for the state) has been checked the
bidAmount and transaction type has been selected.

Now my question is,
a. in the action form. Do I need to defind the bidAmount as an array
b. I didn't know about this until know, but are only String type allowed
in actionform ( ihavent read about this anywhere except on one of the
posts in this mailing list) c. I have set the setter and getter for
(lets take the example of bidAmount only) like this.


    public String getBidAmount(int index) {
            String tmp = new String();
            System.err.println("Value of index: " + index);
            try {
                tmp = bidAmount[index];
            } catch (Exception e) {
                System.err.println("Error: " + e.getMessage());
            }
        return tmp;

}

    public void setBidAmount(int index, String value) {
        System.err.println("index: " + index);
        System.err.println("Value: " + value);
        System.err.println("------------------");
        this.bidAmount[index] = value;
    }



And the corresponding jsp tags as follows.

<logic:iterate id="state" name="STATES" indexId="currIdx">

<tr bgcolor="#F8F8F8">
<td align="left" valign="top">
<html:multibox property="stateId" styleClass="flat">
<bean:write name="state" property="id" />
</html:multibox> <bean:write name="state" property="name" />
</td>
<td >
<html:text name="bidForm"
property='<%="bidAmount["+currIdx+"]"%>' styleClass="flat" size="3" />
</td>


          <td align="center">
            BC <html:radio name="bidForm" property="mode" value="2"
titleKey="app.bcall"  indexed="true" styleClass="flat" />
            | SC <html:radio name="bidForm" property="mode" value="1"
titleKey="app.scall"  indexed="true"  styleClass="flat" />
          </td>

<td align="right">
<bean:write name="state" property="buyingCall" ignore="true"
/>
</td>
<td align="right">
<bean:write name="state" property="sellingCall"
ignore="true" />
</td>


        </tr>
        </logic:iterate>



I know the the inline scriptlet is very ugly, but this was the only way
I could get it to call the index number in the getter method. However
the desperate attempt (try and catch) makes the form work (not much use)
I cant get the the setter to set the values in the individual array, and
get a stack trace error instead.


I am not really sure where Is wrong and non or the documentataion define
things very clearly (or maybe I am poor in comprehension) Apologies
again to people who think I am bothering them by posting again and
again, but this is my last hope!!


Hope someone helps!
(ps: once I am through with this, I shall write my own HOW TO for the
indexed properties and its use)

Rajat Pandit | [EMAIL PROTECTED]
+91 612 3117606
[ Developer and Part Time Human Being]


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


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



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



Reply via email to