Hi,
The only condition for this to work is that the objects in the array
implements equals(...). The getObjectArrayProperty(...) function
probably belongs in org.apache.commons.beanutils.BeanUtils.
joachim gjesdal
Index:
jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java
===================================================================
RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java,v
retrieving revision 1.12
diff -u -r1.12 MultiboxTag.java
---
jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java
11 Dec 2001 17:54:28 -0000 1.12
+++
jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java
7 Mar 2002 17:03:44 -0000
@@ -73,6 +73,11 @@
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.ResponseUtils;
+import java.util.*;
+import java.lang.reflect.Array;
+import org.apache.commons.beanutils.PropertyUtils;
+
+
/**
* Tag for input fields of type "checkbox". This differs from CheckboxTag
@@ -130,7 +135,7 @@
* The value which will mark this checkbox as "checked" if present
* in the array returned by our property getter.
*/
- protected String value = null;
+ protected Object value = null;
// -------------------------------------------------------------
Properties
@@ -161,7 +166,7 @@
/**
* Return the server value.
*/
- public String getValue() {
+ public Object getValue() {
return (this.value);
@@ -173,7 +178,7 @@
*
* @param value The new server value
*/
- public void setValue(String value) {
+ public void setValue(Object value) {
this.value = value;
@@ -238,7 +243,7 @@
results.append("\"");
}
results.append(" value=\"");
- String value = this.value;
+ Object value = this.value;
if (value == null)
value = this.constant;
if (value == null) {
@@ -248,17 +253,20 @@
PageContext.REQUEST_SCOPE);
throw e;
}
- results.append(ResponseUtils.filter(value));
+ if (value instanceof String){
+ value = ResponseUtils.filter((String)value);
+ }
+ results.append(value);
results.append("\"");
Object bean = pageContext.findAttribute(name);
- String values[] = null;
+ Object values[] = null;
if (bean == null)
throw new JspException
(messages.getMessage("getter.bean", name));
try {
- values = BeanUtils.getArrayProperty(bean, property);
+ values = getObjectArrayProperty(bean, property);
if (values == null)
- values = new String[0];
+ values = new Object[0];
} catch (IllegalAccessException e) {
throw new JspException
(messages.getMessage("getter.access", property, name));
@@ -288,8 +296,43 @@
return (EVAL_PAGE);
}
-
-
+/**
+ * Return the value of the specified array property of the specified
+ * bean, as a String array.
+ *
+ * This method probably belongs in commons.BeanUtils ??
+ */
+
+ public static Object[] getObjectArrayProperty(Object bean, String name)
+ throws IllegalAccessException, InvocationTargetException,
+ NoSuchMethodException {
+ Object value = PropertyUtils.getProperty(bean, name);
+ if (value == null) {
+ return (null);
+ } else if (value instanceof Collection) {
+ ArrayList values = new ArrayList();
+ Iterator items = ((Collection) value).iterator();
+ while (items.hasNext()) {
+ values.add(items.next());
+ }
+ return ((Object[]) values.toArray(new Object[values.size()]));
+ } else if (value.getClass().isArray()) {
+ ArrayList values = new ArrayList();
+ try {
+ int n = Array.getLength(value);
+ for (int i = 0; i < n; i++) {
+ values.add(Array.get(value, i));
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {
+ ;
+ }
+ return ((Object[]) values.toArray(new Object[values.size()]));
+ } else {
+ Object results[] = new Object[1];
+ results[0] = value;
+ return (results);
+ }
+ }
/**
* Release any acquired resources.
*/
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>