in tapestry-framework/src/org/apache/tapestry/form/PropertySelection.java [77:162]
protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
{
IForm form = getForm(cycle);
boolean rewinding = form.isRewinding();
String name = form.getElementId(this);
if (rewinding)
{
// If disabled, ignore anything that comes up from the client.
if (isDisabled())
return;
String optionValue = cycle.getRequestContext().getParameter(name);
Object value = (optionValue == null) ? null : getModel().translateValue(optionValue);
setValue(value);
return;
}
IPropertySelectionRenderer renderer = getRenderer();
if (renderer != null)
{
renderWithRenderer(writer, cycle, renderer);
return;
}
writer.begin("select");
writer.attribute("name", name);
if (isDisabled())
writer.attribute("disabled", "disabled");
if (getSubmitOnChange())
writer.attribute("onchange", "javascript:this.form.submit();");
// Apply informal attributes.
renderInformalParameters(writer, cycle);
writer.println();
IPropertySelectionModel model = getModel();
if (model == null)
throw Tapestry.createRequiredParameterException(this, "model");
int count = model.getOptionCount();
boolean foundSelected = false;
boolean selected = false;
Object value = getValue();
for (int i = 0; i < count; i++)
{
Object option = model.getOption(i);
if (!foundSelected)
{
selected = isEqual(option, value);
if (selected)
foundSelected = true;
}
writer.begin("option");
writer.attribute("value", model.getValue(i));
if (selected)
writer.attribute("selected", "selected");
writer.print(model.getLabel(i));
writer.end();
writer.println();
selected = false;
}
writer.end(); // <select>
}