I've tried another example also.......

ListForm.java
=========
package com.myapp.struts.formbeans;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.util.*;
/**
 *
 * @author Sai
 */
public class ListForm extends ActionForm {


    private int size = 3;
    private List friends = new ArrayList(size);

    public List getFriends( ) {
        return friends;
    }

    public String getFriend(int index) {
        if (index >= friends.size(  )) {
            friends.add(index, new String());
        }
        return (String) friends.get(index);
    }

    public void setFriend(int index, String name) {
        System.out.println("size: "+friends.size()+"----- index:"+index);
    }

    public void reset(ActionMapping mapping, HttpServletRequest request) {
        // prepopulate the list with empty strings
        friends = new ArrayList( );
        for (int i=0; i<size;i++) friends.add("");
    }


}

pollsForm2.jsp
==============
<h2>List Form Test</h2>
        <html:form action="/multipleForm" method="get">
            Who are your 3 friends:<br />
            Friend 1: <html:text property="friend[0]"/><br />
            Friend 2: <html:text property="friend[1]"/><br />
            Friend 3: <html:text property="friend[2]"/><br />
            Friend 3: <html:text property="friend[3]"/><br />
            Friend 3: <html:text property="friend[4]"/><br />
            Friend 3: <html:text property="friend[5]"/><br />
            Friend 3: <html:text property="friend[6]"/><br />
            Friend 3: <html:text property="friend[7]"/><br />
            <html:submit/>
        </html:form>

The output while setting the request parameter values is as follows......
size: 3----- index:0
size: 3----- index:4
size: 3----- index:3
size: 3----- index:6
size: 3----- index:7
size: 3----- index:5
size: 3----- index:1
size: 3----- index:2

We can see here also struts is not settings the parameter values in order (
i mean according to the index ). It's trying to set object at 0 index,
jumping by trying to set at 4 index.

Why is this so??........is this problem solved in struts 1.2.9 ( i'm
currently using 1.2.7) ??

Any personal suggestions are also appreciated..........

Friends, please help


On Wed, May 7, 2008 at 1:30 AM, venkat reddy <[EMAIL PROTECTED]> wrote:

> I wanted to find a way to handle dynamic number of arguments for my
> poll-posting form which should be able to handle dynamic number of choice
> fields.
>
> So i maintained a list (pollChoices --> java.util.List type) for
> maintaining dynamic number of choice fields.
>
> ==============================
>                    PollForm.java
> ==============================
>
> package com.myapp.struts.formbeans;
> import org.apache.struts.action.*;
> import javax.servlet.http.*;
> import java.util.*;
> import org.apache.commons.lang.*;
> /**
>  *
>  * @author Sai
>  */
> public class PollForm extends ActionForm {
>
>     private String pollQuestion;
>     private String numberOfDays;
>     private ArrayList pollChoices;
>
>     /** Creates a new instance of BasicForm */
>     public PollForm() {
>     }
>
>     public void reset(ActionMapping map, HttpServletRequest req) {
>         System.out.println("Reset start...........");
>         setPollQuestion("");
>         setNumberOfDays("");
>         pollChoices = new ArrayList();
>         System.out.println("Reset end...........");
>     }
>     public ActionErrors validate(ActionMapping map, HttpServletRequest req)
> {
>
>         System.out.println("Validate method...........");
>         ActionErrors errors = new ActionErrors();
>
>         if(StringUtils.isBlank(pollQuestion))
>             errors.add("pollQuestion",new
> ActionMessage("errors.required","Poll Question"));
>         if(StringUtils.isBlank(numberOfDays))
>             errors.add("numberOfDays",new
> ActionMessage("errors.required","Number of days"));
>         if(pollChoices.size() < 2)
>             errors.add("pollChoice",new
> ActionMessage("errors.required","Atleast two poll choices"));
>         return errors;
>     }
>
>     public String getPollQuestion() {
>         return pollQuestion;
>     }
>
>     public void setPollQuestion(String pollQuestion) {
>         this.pollQuestion = pollQuestion;
>     }
>
>     public String getNumberOfDays() {
>         return numberOfDays;
>     }
>
>     public void setNumberOfDays(String numberOfDays) {
>         this.numberOfDays = numberOfDays;
>     }
>
>     public String getPollChoice(int index) {
>
>         if(index >= pollChoices.size()) {
>             pollChoices.add(index,new String());
>         }
>         return (String) pollChoices.get(index);
>
>     }
>
>     public void setPollChoice(int index,String choice) {
>         System.out.println("size: "+pollChoices.size()+"-----
> index:"+index);
>
>         if(index < pollChoices.size())
>             pollChoices.set(index,choice);
>         else
>             pollChoices.add(index,choice);
>
>     }
>
> }
>
>
>
> ===============================================================================
>
> The html-form looks like below
>
> <html:form method="get" action="/multipleForm">
>             <html:text property="pollQuestion" /><br/><br/>
>             <html:text property="numberOfDays" /><br/><br/>
>             <html:text property="pollChoice[0]" /><br/><br/>
>             <html:text property="pollChoice[1]" /><br/><br/>
>             <html:text property="pollChoice[2]" /><br/><br/>
>             <html:text property="pollChoice[3]" /><br/><br/>
>             <html:text property="pollChoice[4]" /><br/><br/>
>             <html:text property="pollChoice[5]" /><br/><br/>
>             <html:text property="pollChoice[6]" /><br/><br/>
>             <html:text property="pollChoice[7]" /><br/><br/>
>             <html:submit />
> </html:form>
>
> =================================================
> I'm using struts 1.2.7
>
> Now the problem is when struts populates my pollChoice fields using
> bean-utils setIndexedProperty method it's setting is starting from index 2.
> I mean this is the output when i ran my program.
>
> Reset start...........
> Reset end...........
> size: 0----- index:2
> size: 0----- index:3
> size: 0----- index:1
> size: 0----- index:0
> size: 0----- index:7
> size: 0----- index:6
> size: 0----- index:4
> size: 0----- index:5
> Validate method...........
>
>
> Note: I've provided, System.out.println("size: "+pollChoices.size()+"-----
> index:"+index); inside my PollForm.java to see how struts sets my form.
>
>
> As i said i'm getting an error, that's because the size is 0 and the index
> it's trying to set is greater than that.
>

Reply via email to