0

I am creating a program that first of all, with a number set by the user, it create an array of days of the week on the screen, with a checkbox. (The [] is a checkbox).

Example:

If the user has selected the number 2, there will appear 2 rows:

Week 1: Monday[X] Tuesday[X] Wednesday[X] Thursday[] Freeday[] Saturday[] Sunday[].

Week 2: Monday[] Tuesday[X] Wednesday[X] Thursday[X] Freeday[] Saturday[] Sunday[]

Then, in the second page, I want to show THE DAYS THAT THE USER HAVE CLICK TO. Something like that:

Days selected on the Week 1: Monday, Tuesday, Wednesday.

Days selected on the Week 2: Tuesday, Wednesday, Thursday.

but... with this code I'm getting something like this, and I don't want it...:

Week: 1 - Monday--

Week: 2 - Tuesday--

Week: 3 - Wednesday--

Week: 4 - Tuesday--

Week: 5- Wednesday--

Week: 6 - Thursday--

How can I solve it?

Thanks you!

 if(request.getParameter("number")!=null)
        {  
            String number;
            int number2;
            number=request.getParameter("number");
            number2=Integer.parseInt(number);
            out.println("<form action='ex2c.jsp' method='get'>");
            String[] dias = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
            for (int i=0; i<number2; i++)
            {
                out.print("<br>");
                out.println("Week: "+i+1+" - " ); 

                for(int j=0; j<7; j++)
                {

                    out.println("<input type='checkbox' name='check' value='"+dias[j]+"'>"+dias[j]+"</input>");    
                }
            } 
                out.println("<br><br><input type='submit' name='ok'/></form>"); 
        }
   if(request.getParameter("ok")!=null)
    {  
       // String num=request.getParameter("number");
       // String [] number;
        String [] number = request.getParameterValues("check");

        out.println(number.length);
        out.println("<br />");
        for (int i=0;i<number.length;i++)   
        {
            out.println("<br><br>Week: "+i+1+" - " );
            out.println(number[i]+"--");

            for(int j=0; j<2; j++)
            {

                //out.println(number[j]+"--") ;   
            }

        }


        }

1 Answer 1

2

You're sending all the week days in the same form without differentiating the week, you're putting all the days in a input with name="check", and you are receiving it all together in String [] number = request.getParameterValues("check");.

The thing is you're sending Monday, Tuesday, Wednesday for week 1, and Tuesday, Wednesday, Thursday for week 2 because you're creating:

<form action='ex2c.jsp' method='get'>
   <input type='checkbox' name='check' value='Monday'>Monday</input>
   <input type='checkbox' name='check' value='Tuesday'>Tuesday</input>
   ...
   <input type='checkbox' name='check' value='Sunday'>Sunday</input>
   <input type='checkbox' name='check' value='Monday'>Monday</input>
   <input type='checkbox' name='check' value='Tuesday'>Tuesday</input>
   ...
   <input type='checkbox' name='check' value='Sunday'>Sunday</input>
   <input type='submit' name='ok'/>
</form>

So when you submit this form, through this code String [] number = request.getParameterValues("check"); you get: ["Monday","Tuesday","Wednesday","Tuesday", "Wednesday", "Thursday"].

If you want to show in the second jsp the days checked by user in the first jsp, you've to found a way to group the days in a specific week and send this information to the server in order that they can differentiate between its.

You can try using your number parameter to add a _number to your name inputs and send also this number with the form to check how many weeks you've to print, in based on your code:

First jsp:

if(request.getParameter("number")!=null)
{  
   String number;
   int number2;
   number=request.getParameter("number");
   number2=Integer.parseInt(number);
   out.println("<form action='ex2c.jsp' method='get'>");
   // ADDS THE INPUT WITH WEEKS
   out.println("<input type='text' name='weeks' value='" + number + "'>");
   String[] dias = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
   for (int i=1; i<=number2; i++)
   {
       out.print("<br>");
       out.println("Week: "+ i + " - " ); 

       for(int j=0; j<7; j++)
       {
          // ADD THE WEEK NUMBER IN THE NAME
          out.println("<input type='checkbox' name='check_" + i + "' value='"+dias[j]+"'>"+dias[j]+"</input>");    
       }
    } 
    out.println("<br><br><input type='submit' name='ok'/></form>"); 
}

With this you generate something like:

<form action='ex2c.jsp' method='get'>
   <input type='text' name='weeks' value='2'>
   <input type='checkbox' name='check_1' value='Monday'>Monday</input>
   <input type='checkbox' name='check_1' value='Tuesday'>Tuesday</input>
   ...
   <input type='checkbox' name='check_1' value='Sunday'>Sunday</input>
   <input type='checkbox' name='check_2' value='Monday'>Monday</input>
   <input type='checkbox' name='check_2' value='Tuesday'>Tuesday</input>
   ...
   <input type='checkbox' name='check_2' value='Sunday'>Sunday</input>
   <input type='submit' name='ok'/>
</form>

Then your second jsp:

if(request.getParameter("ok")!=null)
{  
   int weeks =Integer.parseInt(request.getParameter("weeks"));
   for(int i=1;i<=weeks;i++){
      out.println("<br><br>Week: "+ i +" - " );
      String [] days = request.getParameterValues("check_"+i);     
      for(int j=0;i<days.length;j++)   
      {
         out.println(days[j] + " ");      
      }
      out.println("<br />");
   }
}

I don't try this code however I think that the idea works. Besides I want to comment that the way how you render a jsp seems very odd to me.

Hope this helps,

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.