1.1 --- a/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java Sat May 30 15:28:27 2020 +0200 1.2 +++ b/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java Sat May 30 18:05:06 2020 +0200 1.3 @@ -39,10 +39,7 @@ 1.4 import javax.servlet.http.HttpServletResponse; 1.5 import javax.servlet.http.HttpSession; 1.6 import java.io.IOException; 1.7 -import java.lang.reflect.Constructor; 1.8 -import java.lang.reflect.InvocationTargetException; 1.9 -import java.lang.reflect.Method; 1.10 -import java.lang.reflect.Modifier; 1.11 +import java.lang.reflect.*; 1.12 import java.sql.Connection; 1.13 import java.sql.SQLException; 1.14 import java.util.*; 1.15 @@ -280,30 +277,44 @@ 1.16 * @return the parameter value or an empty optional, if no parameter with the specified name was found 1.17 */ 1.18 protected <T> Optional<T> getParameter(HttpServletRequest req, Class<T> clazz, String name) { 1.19 - final String paramValue = req.getParameter(name); 1.20 - if (paramValue == null) return Optional.empty(); 1.21 - if (clazz.equals(Boolean.class)) { 1.22 - if (paramValue.toLowerCase().equals("false") || paramValue.equals("0")) { 1.23 - return Optional.of((T)Boolean.FALSE); 1.24 - } else { 1.25 - return Optional.of((T)Boolean.TRUE); 1.26 + if (clazz.isArray()) { 1.27 + final String[] paramValues = req.getParameterValues(name); 1.28 + int len = paramValues == null ? 0 : paramValues.length; 1.29 + final var array = (T) Array.newInstance(clazz.getComponentType(), len); 1.30 + for (int i = 0 ; i < len ; i++) { 1.31 + try { 1.32 + final Constructor<?> ctor = clazz.getComponentType().getConstructor(String.class); 1.33 + Array.set(array, i, ctor.newInstance(paramValues[i])); 1.34 + } catch (ReflectiveOperationException e) { 1.35 + throw new RuntimeException(e); 1.36 + } 1.37 + } 1.38 + return Optional.of(array); 1.39 + } else { 1.40 + final String paramValue = req.getParameter(name); 1.41 + if (paramValue == null) return Optional.empty(); 1.42 + if (clazz.equals(Boolean.class)) { 1.43 + if (paramValue.toLowerCase().equals("false") || paramValue.equals("0")) { 1.44 + return Optional.of((T) Boolean.FALSE); 1.45 + } else { 1.46 + return Optional.of((T) Boolean.TRUE); 1.47 + } 1.48 + } 1.49 + if (clazz.equals(String.class)) return Optional.of((T) paramValue); 1.50 + if (java.sql.Date.class.isAssignableFrom(clazz)) { 1.51 + try { 1.52 + return Optional.of((T) java.sql.Date.valueOf(paramValue)); 1.53 + } catch (IllegalArgumentException ex) { 1.54 + return Optional.empty(); 1.55 + } 1.56 + } 1.57 + try { 1.58 + final Constructor<T> ctor = clazz.getConstructor(String.class); 1.59 + return Optional.of(ctor.newInstance(paramValue)); 1.60 + } catch (ReflectiveOperationException e) { 1.61 + throw new RuntimeException(e); 1.62 } 1.63 } 1.64 - if (clazz.equals(String.class)) return Optional.of((T) paramValue); 1.65 - if (java.sql.Date.class.isAssignableFrom(clazz)) { 1.66 - try { 1.67 - return Optional.of((T)java.sql.Date.valueOf(paramValue)); 1.68 - } catch (IllegalArgumentException ex) { 1.69 - return Optional.empty(); 1.70 - } 1.71 - } 1.72 - try { 1.73 - final Constructor<T> ctor = clazz.getConstructor(String.class); 1.74 - return Optional.of(ctor.newInstance(paramValue)); 1.75 - } catch (ReflectiveOperationException e) { 1.76 - throw new RuntimeException(e); 1.77 - } 1.78 - 1.79 } 1.80 1.81 /**