| Method from org.apache.struts.taglib.html.OptionsTag Detail: |
protected void addOption(StringBuffer sb,
String value,
String label,
boolean matched) {
sb.append("< option value=\"");
if (filter) {
sb.append(TagUtils.getInstance().filter(value));
} else {
sb.append(value);
}
sb.append("\"");
if (matched) {
sb.append(" selected=\"selected\"");
}
if (style != null) {
sb.append(" style=\"");
sb.append(style);
sb.append("\"");
}
if (styleClass != null) {
sb.append(" class=\"");
sb.append(styleClass);
sb.append("\"");
}
sb.append(" >");
if (filter) {
sb.append(TagUtils.getInstance().filter(label));
} else {
sb.append(label);
}
sb.append("< /option >\r\n");
}
Add an option element to the specified StringBuffer based on the
specified parameters.
Note that this tag specifically does not support the
styleId tag attribute, which causes the HTML
id attribute to be emitted. This is because the HTML
specification states that all "id" attributes in a document have to be
unique. This tag will likely generate more than one option
element element, but it cannot use the same id value. It's
conceivable some sort of mechanism to supply an array of id
values could be devised, but that doesn't seem to be worth the trouble. |
public int doEndTag() throws JspException {
// Acquire the select tag we are associated with
SelectTag selectTag = (SelectTag) pageContext.getAttribute(Constants.SELECT_KEY);
if (selectTag == null) {
throw new JspException(messages.getMessage("optionsTag.select"));
}
StringBuffer sb = new StringBuffer();
// If a collection was specified, use that mode to render options
if (collection != null) {
Iterator collIterator = getIterator(collection, null);
while (collIterator.hasNext()) {
Object bean = collIterator.next();
Object value = null;
Object label = null;
try {
value = PropertyUtils.getProperty(bean, property);
if (value == null) {
value = "";
}
} catch (IllegalAccessException e) {
throw new JspException(
messages.getMessage("getter.access", property, collection));
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
throw new JspException(
messages.getMessage("getter.result", property, t.toString()));
} catch (NoSuchMethodException e) {
throw new JspException(
messages.getMessage("getter.method", property, collection));
}
try {
if (labelProperty != null) {
label = PropertyUtils.getProperty(bean, labelProperty);
} else {
label = value;
}
if (label == null) {
label = "";
}
} catch (IllegalAccessException e) {
throw new JspException(
messages.getMessage("getter.access", labelProperty, collection));
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
throw new JspException(
messages.getMessage("getter.result", labelProperty, t.toString()));
} catch (NoSuchMethodException e) {
throw new JspException(
messages.getMessage("getter.method", labelProperty, collection));
}
String stringValue = value.toString();
addOption(sb, stringValue, label.toString(), selectTag.isMatched(stringValue));
}
}
// Otherwise, use the separate iterators mode to render options
else {
// Construct iterators for the values and labels collections
Iterator valuesIterator = getIterator(name, property);
Iterator labelsIterator = null;
if ((labelName != null) || (labelProperty != null)) {
labelsIterator = getIterator(labelName, labelProperty);
}
// Render the options tags for each element of the values coll.
while (valuesIterator.hasNext()) {
Object valueObject = valuesIterator.next();
if (valueObject == null) {
valueObject = "";
}
String value = valueObject.toString();
String label = value;
if ((labelsIterator != null) && labelsIterator.hasNext()) {
Object labelObject = labelsIterator.next();
if (labelObject == null) {
labelObject = "";
}
label = labelObject.toString();
}
addOption(sb, value, label, selectTag.isMatched(value));
}
}
TagUtils.getInstance().write(pageContext, sb.toString());
return EVAL_PAGE;
}
Process the end of this tag. |
public int doStartTag() throws JspException {
return SKIP_BODY;
}
Process the start of this tag. |
public String getCollection() {
return (this.collection);
}
|
public boolean getFilter() {
return filter;
}
|
protected Iterator getIterator(String name,
String property) throws JspException {
// Identify the bean containing our collection
String beanName = name;
if (beanName == null) {
beanName = Constants.BEAN_KEY;
}
Object bean = TagUtils.getInstance().lookup(pageContext, beanName, null);
if (bean == null) {
throw new JspException(messages.getMessage("getter.bean", beanName));
}
// Identify the collection itself
Object collection = bean;
if (property != null) {
try {
collection = PropertyUtils.getProperty(bean, property);
if (collection == null) {
throw new JspException(messages.getMessage("getter.property", property));
}
} catch (IllegalAccessException e) {
throw new JspException(messages.getMessage("getter.access", property, name));
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
throw new JspException(
messages.getMessage("getter.result", property, t.toString()));
} catch (NoSuchMethodException e) {
throw new JspException(messages.getMessage("getter.method", property, name));
}
}
// Construct and return an appropriate iterator
if (collection.getClass().isArray()) {
collection = Arrays.asList((Object[]) collection);
}
if (collection instanceof Collection) {
return (((Collection) collection).iterator());
} else if (collection instanceof Iterator) {
return ((Iterator) collection);
} else if (collection instanceof Map) {
return (((Map) collection).entrySet().iterator());
} else if (collection instanceof Enumeration) {
return new IteratorAdapter((Enumeration) collection);
} else {
throw new JspException(
messages.getMessage("optionsTag.iterator", collection.toString()));
}
}
Return an iterator for the option labels or values, based on our
configured properties. |
public String getLabelName() {
return labelName;
}
|
public String getLabelProperty() {
return labelProperty;
}
|
public String getName() {
return name;
}
|
public String getProperty() {
return property;
}
|
public String getStyle() {
return style;
}
|
public String getStyleClass() {
return styleClass;
}
|
public void release() {
super.release();
collection = null;
filter = true;
labelName = null;
labelProperty = null;
name = null;
property = null;
style = null;
styleClass = null;
}
Release any acquired resources. |
public void setCollection(String collection) {
this.collection = collection;
}
|
public void setFilter(boolean filter) {
this.filter = filter;
}
|
public void setLabelName(String labelName) {
this.labelName = labelName;
}
|
public void setLabelProperty(String labelProperty) {
this.labelProperty = labelProperty;
}
|
public void setName(String name) {
this.name = name;
}
|
public void setProperty(String property) {
this.property = property;
}
|
public void setStyle(String style) {
this.style = style;
}
|
public void setStyleClass(String styleClass) {
this.styleClass = styleClass;
}
|