Ich machte einen Methodenaufruf objectMapper.writeValueAsString
in EL so.Argumenttyp des parametrisierten Methodenaufrufs in EL
<%@ attribute name="actionItems" required="true" rtexprvalue="true" type="java.util.List"%>
<jsp:useBean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper" scope="page" />
<jsp:useBean id="actionItemsMap" class="java.util.HashMap" />
<c:set target="${actionItemsMap}" property="actionItems" value="${objectMapper.writeValueAsString(actionItems)}" />
writeValueAsString
nimmt einen Objektparameter in method signature. Es funktionierte, als ich actionItems
übergebe, die eine ArrayList
ist.
Jetzt bin ich ein Upgrade Apache Tomcat 7 von 7.0.52 bis 7.0.70, und der Code mit MethodNotFoundException
gebrochen:
javax.el.MethodNotFoundException: java.lang.NoSuchMethodException: org.codehaus. jackson.map.ObjectMapper.writeValueAsString (java.util.ArrayList) bei javax.el.BeanELResolver.invoke (BeanELResolver.java:422) bei org.apache.jasper.el.JasperELResolver.invoke (JasperELResolver.java:139)
Es wird versucht, eine Methodezu findenmit dem Argumenttyp ArrayList
. Es scheint mit this change in 7.0.53 verwandt zu sein. Wie sollte ich meinen Code ändern, damit er funktioniert? Muss ich den Methodenaufruf mit einem Object-Argument ausführen? Wenn ja, gibt es eine Möglichkeit, die ArrayList
zu einem Objekt in EL zu werfen und dann den Methodenaufruf zu machen?