struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stéphane Zuckerman <stephane.zucker...@gmail.com>
Subject Re: How to create form rows dynamically
Date Thu, 23 Jun 2005 10:07:29 GMT
Ciaran Hanley a écrit :
> Can somebody help me or propose a solution to the following please.
> 
>  
> 
> I wish to create a form dynamically. Depending on the business logic there
> could be 0 to N rows in the form. I tried to use a form with an array of
> strings and use the indexed="true" setting in the html:text boxes but as I
> was not following any example I ran into problems and didn't have any guide
> as to where I was going wrong.
> 
>  
> 
> I also need to iterate over a bean containing information which corresponds
> to the form as the form boxes are being displayed.
> 
>  
> 
> Say if there is 3 rows required, it should ok like the following.
> 
>  
> 
> Payment     Old Amnt    New Amnt          Date
> 
> 1           35          [45]              [12/12/04]
> 
> 2           35          [45]              [12/01/05]
> 
> 3           35          [45]              [12/02/05]
> 
>  
> 
> Where [] represents a html:text box.
> 
>  
> 
> I am also unsure as to how to access these values when I get to the
> form/action classes.
> 
>  
> 
> Any help would be much appreciated!

There are a few ways to do that. The most obvious (according to me) 
would be to have a "Billing" (for instance) class, with all the 
attributes that suit you, then :

- use a lazy list (go to 
http://wiki.apache.org/struts/StrutsCatalogLazyList for more information 
about them) to store them. The use of LazyList instead of "classical" 
List (with ArrayList) is all about indexes : when you start from the 
server and you display the items stored in your list, all is fine.

(something like :

<!-- titles/headers go here -->
<logic:iterate id="item" name="myList">
	<html:text name="formList" property="payment" indexed="true"/>
	<html:text name="formList" property="oldAmnt" indexed="true"/>
	<html:text name="formList" property="newAmnt" indexed="true"/>
	<html:text name="formList" property="date"    indexed="true"/>
	<br/>
</logic:iterate>
)

But when the user clicks on the submit button, a horrible thing happens 
: IndexOutOfBoundException (because a new List is instanciated from the 
server side - the old one has been lost as it is a new request - and 
currently, something like formList.get(0) returns null, which isn't what 
Struts expected). So you have to make some mechanism to return an object 
(preferably of the right kind) so Struts remains happy. Hence the LazyLists.

-- 
Stéphane Zuckerman

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message