2016-10-30 2 views
1

Ich habe versucht, von Struts 2 Version 2.5.3 auf 2.5.5 zu aktualisieren ... Ich habe ein seltsames Problem.Struts Upgrade auf 2.5.5 (von 2.5.3)

Wir haben einen Tag wie folgt:

<%@tag description="Rensders an ajax link" pageEncoding="UTF-8"%> 

<%@attribute name="parameters" description="list of parameters that put to this link" 
    type="java.util.HashMap" required="false"%> 

     .............. 
     <c:forEach items="${parameters}" var="p"> 
       <c:param name="${p.key}" value="${p.value}"/> 
     </c:forEach> 

Der obige Code löst eine Ausnahme, wenn ich ein Upgrade!

Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 
    at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274) 
    at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238) 
    at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155) 
    at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256) 
    at org.apache.jsp.tag.web.html.link_tag._jspx_meth_c_005fforEach_005f0(link_tag.java:439) 
    at org.apache.jsp.tag.web.html.link_tag._jspx_meth_c_005furl_005f0(link_tag.java:405) 
    at org.apache.jsp.tag.web.html.link_tag._jspx_meth_sec_005fauthorize_005f0(link_tag.java:366) 
    at org.apache.jsp.tag.web.html.link_tag.doTag(link_tag.java:230) 

Wie Sie sehen, ist das Tag ein JSTL-Tag nicht struts!

Ich benutze Tomcat 8.0. Alle Kommentare.

Antwort

2

Überraschenderweise die parameters Name, den ich in meinem Tag verwendet hat einen Konflikt mit Struts 2. Es scheint, dass diese Version von Struts eine parameters in dem Kontext definiert hat, die einen Namenskonflikt gemacht.

Als ich ${parameters} in einer jsp testen Streben 2.5.3 Ich sehe unter Hinweis darauf,

Wenn ich testen ${parameters} in einer jsp 2.5.5 Streben Ich sehe org.apache.struts2.dispatcher.HttpParameters

So Attribut I umbenannt markieren können params und alles ist in Ordnung!

+1

Dies ist seltsam ... 'Parameter' Name war dort für sehr lange Zeit, vielleicht ist es mit Typ von einer einfachen' Map' zu 'HttpParameters' zu ändern - die' Map' kann leer sein und Sie können es mit überschreiben deine 'Karte'. –