You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Yasser Zamani (Jira)" <ji...@apache.org> on 2021/04/22 18:37:00 UTC

[jira] [Commented] (WW-5125) forbidden name attribute values (size, clone...?) in using the default theme

    [ https://issues.apache.org/jira/browse/WW-5125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17329350#comment-17329350 ] 

Yasser Zamani commented on WW-5125:
-----------------------------------

Thanks very good catch! Looks like we must try if [faq_simple_map|https://freemarker.apache.org/docs/app_faq.html#faq_simple_map] is applicable with backward compatibility. That being said it's a Freemarker behavior: "When I list the contents of a map (a hash) with {{?keys}}/{{?values}}, I get the {{java.util.Map}} methods mixed with the real map entries. Of course, I only want to get the map entries." from mentioned link above.

> 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
>            Priority: Major
>             Fix For: 2.5.27, 2.6
>
>
> 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)