Re: A Form with many Checkboxes

"Malcolm Edgar" <[email protected]> Thu, 20 Feb 2003 06:14:28 +0800
Newsgroups gmane.comp.java.tapestry.devel
Message-ID <[email protected]>
Hi Joseph,

As you probably know by now the Tapestry checkbox component provides a 
boolean control. So the you will need to handle the illnessName and 
illnessID stuff in some sort of bean.

I would handle the multiple checkboxs in a foreach loop:

HTML:

<form jwcid="form">
<span jwcid="foreachIllness">
  <input type="checkbox" jwcid="illnessCheckbox">
  <span jwcid="illnessLabel"><br/>
</span>
<input type="submit">
</form>

PAGE:

<component id="form" type="Form">
    <binding name="listener" expression="listeners.formSubmit"/>
</component>

<component id="foreachIllness" type="Foreach">
    <binding name="source" expression="illnessList"/>
    <binding name="value" expression="illness"/>
</component>

<component id="illnessLabel" type="Insert">
    <binding name="value" expression="illness.name"/>
</component>

<component id="illnessCheckbox" type="Checkbox">
    <binding name="selected" expression="illness.selected"/>
</component>

JAVA:

public clas Illness implements Serializable {
   private int id;
   private String name;
   private boolean selected;

   public int getId() { return id; }

   public String getName() { return name; }

   public boolean getSelected() { return selected; }

   public void setSelected(boolean value) { selected = value; }

   public String toString() {
      return getClass().getName()
         + "[id=" + id
         + ",name=" + name
         + ",selected=" + selected
         + "]";
   }
}

public class IllnessPage extends BasePage {
   private List illnessList;
   private Illness illness;

   // Read by foreachIllness component
   public List getIllnessList() {
      return illnessList;
   }

   // Read by illnessCheckbox and illnessLabel components
   public Illness getIllness() {
      return illness;
   }

   // Set by foreachIllness component
   public void setIllness(Illness value) {
      illness = value;
   }

   // Cleans up page when returned to pool
   protected void initialize() {
      illnessList = null;
      illness = null;
   }

   // All the illness selections will be set before this method
   // is called
   public void formSubmit(IRequestCycle cycle) {
      for (int i = 0; i < illnessList.size(); i++) {
          System.out.println("Illness: " + illnessList.get(i));
      }
   }
}


"http://jakarta.apache.org/proposals/tapestry/doc/ComponentReference/Checkbox.html"

regards Malcolm Edgar

>From: "Meade, Joseph L" <[email protected]>
>To: "Tapestry-Developer (E-mail)" 
><[email protected]>
>Subject: [Tapestry-developer] A Form with many Checkboxes
>Date: Wed, 19 Feb 2003 12:25:11 -0500
>
>Tapestry Gurus,
>
>I need some help with the paradigm shift.
>
>I've got a form with an arbitrary number of related checkboxes.  The value 
>of each is an int corresponding to a String label.  (illnessName and 
>illnessID)
>
>In the servlet paradigm, I would name them all the same thing and call 
>something like this in the form listener:
>String[] illnessIDs = request.getParameterValues("illness");
>
>But, it seems in Tapestry that you need a specific boolean attribute for 
>each checkbox?  That's tough when you don't know how many you will have or 
>what they will be called.
>
>What am I missing?  How can I receive a collection of values corresponding 
>to the checked boxes?  I know the Checkbox component accepts informal 
>parameters, so I have set a value for each, but I can't see how to retrieve 
>it once the form is submitted.
>
>Thanks for your help.
>
>
>
>Joe Meade
>[email protected]
>
>
>
>-------------------------------------------------------
>This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
>The most comprehensive and flexible code editor you can use.
>Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
>www.slickedit.com/sourceforge
>_______________________________________________
>Tapestry-developer mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/tapestry-developer


_________________________________________________________________
MSN Instant Messenger now available on Australian mobile phones. Go to  
http://ninemsn.com.au/mobilecentral/hotmail_messenger.asp



-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge