[Struts] Populate Potential new Element in an array
28/01/2009
/** * Populate the bean prefix using request parameters. * @param request The HTTP request * @param form .. * @param arrayKey .. * @param arrayItemClazz .. */ public static void getPotentialNewElement(final HttpServletRequest request, final Object beanForm, final String arrayKey, final Class arrayItemClazz) throws Exception { Object array = ReflectHelper.invokeGetter(beanForm, arrayKey); if (array.getClass().isArray()) { int offsetIndex = Array.getLength(array); Object newArrayElement = null; List getters = ReflectHelper.getGettersRecursivly(arrayItemClazz); do { for (Iterator iter = getters.iterator(); iter.hasNext();) { Method getter = (Method) iter.next(); if (getter.getReturnType().getName().startsWith("java.lang.String")) { String getterKey = ReflectHelper.getFieldName(getter); String value = request.getParameter(arrayKey + "[" + offsetIndex + "]." + getter); if (value != null) { if (newArrayElement == null) { newArrayElement = ReflectHelper.newInstance(arrayItemClazz.getName()); } ReflectHelper.invokeSetter(newArrayElement, getterKey, value, String.class); } } } if (newArrayElement != null) { Object newArray = Array.newInstance(arrayItemClazz, offsetIndex + 1); for (int i = 0; i < offsetIndex; ++i) { Array.set(newArray, i, Array.get(array, i)); } offsetIndex++; Array.set(newArray, offsetIndex, newArrayElement); } } while (newArrayElement != null); } }