我试图从struts 2版本升级2.5.3到2.5.5…。我遇到一个奇怪的问题。
2.5.3
2.5.5
我们有一个标签如下:
<%@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>
升级时,以上代码会引发异常!
Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach> 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)
如您所见,该标记是JSTL标记,而不是struts!
我使用Tomcat 8.0。任何意见。
令人惊讶的是parameters,我在标签中使用的名称与struts 2冲突。似乎该版本的struts parameters在上下文中定义了a ,这导致名称冲突。
parameters
当我${parameters}在jsp struts中测试时,2.5.3我注意到
${parameters}
当我${parameters}在jsp struts中测试时,2.5.5我看到org.apache.struts2.dispatcher.HttpParameters
org.apache.struts2.dispatcher.HttpParameters
因此,我将may tag属性重命名为params,一切正常!
params