[ https://issues.apache.org/jira/browse/WW-5125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17338750#comment-17338750 ]
ASF subversion and git services commented on WW-5125: ----------------------------------------------------- Commit 04bc4bd97c41bd181dd45580ce12236218177aca in struts's branch refs/heads/master from Yasser Zamani [ https://gitbox.apache.org/repos/asf?p=struts.git;h=04bc4bd ] [WW-5125] use .get(...) instead of [...] for fieldErrors All [ occurrences in all ftl files reviewed. Only fieldErrors had used [...] which replaced by .get(...) to fix WW-5125 as well as aligning with other ftl files conduct. > forbidden name attribute values (size, clone...?) in <s:textfield> using the > default theme > ------------------------------------------------------------------------------------------ > > Key: WW-5125 > URL: https://issues.apache.org/jira/browse/WW-5125 > Project: Struts 2 > Issue Type: Bug > Affects Versions: 2.5.26 > Reporter: Patrice DUROUX > Assignee: Yasser Zamani > Priority: Minor > Fix For: 2.5.27, 2.6 > > Time Spent: 1h 20m > Remaining Estimate: 0h > > Hi, > It is easy to reproduce running an (empty) action resulting a simple JSP page > like this: > {code:java} > <%@ taglib prefix="s" uri="/struts-tags"%> > <!DOCTYPE html> > <html lang="en"> > <head> > </head> > <body> > <h1>Struts bug2</h1> > <s:textfield theme="simple" name="clone" /> > <s:textfield name="clone" /> > </body> > {code} > The first textfield is rendered but the second throws an exception like: > {code:java} > SEVERE: Error executing FreeMarker template > FreeMarker template error: > Getting the number of items or listing the items is not supported on this > method+sequence (wrapper: f.e.b.SimpleMethodModel) value, because this value > wraps the following Java method, not a real listable value: public > java.lang.Object java.util.HashMap.clone()---- > Tip: Maybe you should to call this method first and then do something with > its return value. > ---- > Tip: obj.someMethod(i) and obj.someMethod[i] does the same for this method, > hence it's a "+sequence". > -------- > FTL stack trace ("~" means nesting-related): > - Failed at: #list fieldErrors[parameters.name] as... [in template > "template/~~~xhtml/controlheader-core.ftl" at line 28, column 1] > - Reached through: #include "/${parameters.templateDir}/... [in > template "template/~~~xhtml/controlheader.ftl" at line 21, column 1] > - Reached through: #include "/${parameters.templateDir}/... [in > template "template/xhtml/text.ftl" at line 21, column 1] > ----Java stack trace (for programmers): > ---- > freemarker.core._TemplateModelException: [... Exception message was already > printed; see it above ...] > at > freemarker.ext.beans.SimpleMethodModel.size(SimpleMethodModel.java:95) > at > freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:312) > at > freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) > at > freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) > at freemarker.core.Environment.visitIteratorBlock(Environment.java:644) > at > freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) > at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) > at freemarker.core.Environment.visit(Environment.java:334) > at freemarker.core.Environment.visit(Environment.java:340) > at freemarker.core.Environment.visit(Environment.java:340) > at freemarker.core.Environment.visit(Environment.java:340) > at freemarker.core.Environment.include(Environment.java:2925) > at freemarker.core.Include.accept(Include.java:171) > at freemarker.core.Environment.visit(Environment.java:334) > at freemarker.core.Environment.visit(Environment.java:340) > at freemarker.core.Environment.include(Environment.java:2925) > at freemarker.core.Include.accept(Include.java:171) > at freemarker.core.Environment.visit(Environment.java:334) > at freemarker.core.Environment.visit(Environment.java:340) > at freemarker.core.Environment.process(Environment.java:313) > at freemarker.template.Template.process(Template.java:383) > at > org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:149) > at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:580) > at org.apache.struts2.components.UIBean.end(UIBean.java:536) > at > org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:39) > at > org.apache.jsp.WEB_002dINF.bug2_jsp._jspx_meth_s_005ftextfield_005f1(bug2_jsp.java:201) > at org.apache.jsp.WEB_002dINF.bug2_jsp._jspService(bug2_jsp.java:139) > at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) > at > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467) > at > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378) > at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) > at > org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:710) > at > org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:457) > at > org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384) > at > org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312) > at > org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:169) > at > org.apache.struts2.result.StrutsResultSupport.execute(StrutsResultSupport.java:206) > at > com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:279) > at > org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:250) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) > at > org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:140) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:140) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:201) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:133) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:89) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:101) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:142) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:160) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:175) > at > com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:121) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:167) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:207) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196) > at > com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) > at > org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48) > at > org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574) > at > org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) > at > org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) > at > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) > at > org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) > at > org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) > at > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) > at > org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) > at java.base/java.lang.Thread.run(Thread.java:832) > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)