A radio button (i.e., input type="radio"). Radio buttons must operate within a org.apache.tapestry5.RadioContainer (normally, the org.apache.tapestry5.corelib.components.RadioGroup component). If the value parameter is not bound, then the default value is a property of the container component whose name matches the Radio component's id.
| Name | Type | Flags | Default | Default Prefix | Description |
|---|---|---|---|---|---|
| disabled | boolean | NOT Allow Null | false | prop | If true, then the field will render out with a disabled attribute (to turn off client-side behavior). Further, a disabled field ignores any value in the request when the form is submitted. |
| label | String | NOT Allow Null | literal | The user presentable label for the field. If not provided, a reasonable label is generated from the component's id, first by looking for a message key named "id-label" (substituting the component's actual id), then by converting the actual id to a presentable string (for example, "userId" to "User Id"). | |
| value | Object | Required, NOT Allow Null | prop | The value associated with this radio button. This is used to determine which radio button will be selected when the page is rendered, and also becomes the value assigned when the form is submitted. |
public enum CardType
{
MASTER_CARD, VISA, AMERICAN_EXPRESS, DINERS_CLUB, DISCOVER
}
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<body>
<h1>Order Payment</h1>
<t:form>
<t:label for="cardNumber"/>:
<t:textfield t:id="cardNumber" size="16"/>
<br/>
<t:label for="type"/>:
<t:radiogroup t:id="type">
<t:radio t:id="masterCard"/>
<t:label for="masterCard"/>
<t:radio t:id="visa"/>
<t:label for="visa"/>
<t:radio t:id="amex"/>
<t:label for="amex"/>
<t:radio t:id="dinersClub"/>
<t:label for="dinersClub"/>
<t:radio t:id="discover"/>
<t:label for="discover"/>
</t:radiogroup>
</t:form>
</body>
</html>The advantage of using radio buttons here, rather than a drop down list, is that we could extend the labels to use a small image of each type of supported card.
We're once again using the trick of matching the component's id to a property of the containing page. The RadioGroup's value parameter will be bound to the page's type property. Likewise, each of the Radio components will be matched to a property of the page.
public class Payment
{
. . .
@Persist
private CardType _type;
public CardType getType() { return _type; }
public void setType(CardType type) { _type = type; }
public CardType getMasterCard() { return CardType.MASTER_CARD; }
public CardType getVisa() { return CardType.VISA; }
public CardType getAmex() { return CardType.AMERICAN_EXPRESS; }
public CardType getDinersClub() { return CardType.DINERS_CLUB; }
public CardType getDiscover() { return CardType.DISCOVER; }
. . .
}We use a number of read-only properties to provide each Radio component with its corresponding enum value, that will ultimately be assigned to the page's type property (if that corresponding Radio component is selected by the user).
This is far from the only pattern of usage; it is much more likely that you will use a Loop component around a single Radio component than you will use a whole array of Radio components as in this example.
We override the default generated labels for a few fields and enum values:
cardnumber-label=Credit Card Number type-label=Credit Card Type dinersclub-label=Diner's Club