Ok, attachments don't work. Code follows inline. ++++++++++++++++++ package tapestry.components;
import org.apache.tapestry.form.RadioGroup; import org.apache.tapestry.form.AbstractFormComponent; import org.apache.tapestry.IMarkupWriter; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.Tapestry; import org.apache.tapestry.annotations.Parameter; import org.apache.tapestry.annotations.ComponentClass; import org.apache.hivemind.ApplicationRuntimeException; /** * TODO: Doc this. * * @author Ben Sommerville */ @ComponentClass(allowBody = false, reservedParameters = "checked,type,name") public abstract class FormRadio extends AbstractFormComponent { @Parameter(name="id", defaultValue="id") public abstract String getIdParameter(); @Parameter public abstract String getDisplayName(); @Parameter public abstract boolean isDisabled(); @Parameter public abstract Object getValue(); /** * Renders the form element, or responds when the form containing the element * is submitted (by checking [EMAIL PROTECTED] org.apache.tapestry.form.Form#isRewinding()}. * * **/ protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) { RadioGroup group = RadioGroup.get(cycle); if (group == null) throw new ApplicationRuntimeException( Tapestry.getMessage("Radio.must-be-contained-by-group"), this, null, null); // The group determines rewinding from the form. // // boolean rewinding = group.isRewinding(); int option = group.getNextOptionId(); // // if (rewinding) // { // // If not disabled and this is the selected button within the radio group, // // then update set the selection from the group to the value for this // // radio button. This will update the selected parameter of the RadioGroup. // // if (!isDisabled() && !group.isDisabled() && group.isSelected(option)) // group.updateSelection(getValue()); // return; // } // writer.beginEmpty("input"); writer.attribute("type", "radio"); writer.attribute("name", group.getName()); renderIdAttribute(writer, cycle); // As the group if the value for this Radio matches the selection // for the group as a whole; if so this is the default radio and is checked. if (group.isSelection(getValue())) writer.attribute("checked", "checked"); if (isDisabled() || group.isDisabled()) writer.attribute("disabled", "disabled"); // The value for the Radio matches the option number (provided by the RadioGroup). // When the form is submitted, the RadioGroup will know which option was, // in fact, selected by the user. writer.attribute("value", option); renderInformalParameters(writer, cycle); } protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle) { RadioGroup group = RadioGroup.get(cycle); if (group == null) throw new ApplicationRuntimeException( Tapestry.getMessage("Radio.must-be-contained-by-group"), this, null, null); // The group determines rewinding from the form. int option = group.getNextOptionId(); // If not disabled and this is the selected button within the radio group, // then update set the selection from the group to the value for this // radio button. This will update the selected parameter of the RadioGroup. if (!isDisabled() && !group.isDisabled() && group.isSelected(option)) group.updateSelection(getValue()); } } -----Original Message----- From: Ben Sommerville [mailto:[EMAIL PROTECTED] Sent: Thursday, 26 October 2006 9:33 PM To: 'Tapestry users' Subject: RE: Dynamic Radiogroup I ran into this problem too. FieldLabel does not work with Radio because it is not an IFormComponent. The order of FieldLabel & the component it refers to doesn't matter. Except that if you put the FieldLabel after the component you have to set prerender=false. I worked around this by creating a radio component that is a form component. The attached file has the class. Now the disclaimer- this is code from 6 or 7 months ago on a project that didn't finish & was developerd early in my tapestry learning cycle - treat with appropriate caution :) cheers, Ben --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]