You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Nathan Hertner (Jira)" <ji...@apache.org> on 2022/04/27 23:31:00 UTC

[jira] [Created] (WW-5178) Freemarker Template Error when migrating Struts2-Core from 2.5.29 to 2.5.30

Nathan Hertner created WW-5178:
----------------------------------

             Summary: Freemarker Template Error when migrating Struts2-Core from 2.5.29 to 2.5.30
                 Key: WW-5178
                 URL: https://issues.apache.org/jira/browse/WW-5178
             Project: Struts 2
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.5.30
            Reporter: Nathan Hertner


Originally, we were attempting to migrate our Struts2-Core from version 2.5.26 to 2.5.30 to bring in the security improvements to OGNL double eval. It was after this that we noticed a strange Freemarker error appearing that did not previously. After doing some checks, we've isolated the exact version that breaks for us. Struts 2.5.29 is working, but with the migration to 2.5.30 we get the following error appearing for the checkbox.ftl template file: 
{code:java}
ERROR - 2022-04-20 13:28:32,366 [qtp1459672753-1897  ] freemarker.runtime - Error executing FreeMarker template
FreeMarker template error:
For "&&" right-hand operand: Expected a boolean, but this has evaluated to a string+extended_hash (String wrapped into f.e.b.StringModel):
==> parameters.nameValue  [in template "template/simple/checkbox.ftl" at line 22, column 32]

----
FTL stack trace ("~" means nesting-related):
        - Failed at: #if parameters.nameValue?? && paramet...  [in template "template/simple/checkbox.ftl" at line 22, column 1]
----

Java stack trace (for programmers):
----
freemarker.core.NonBooleanException: [... Exception message was already printed; see it above ...]
        at freemarker.core.Expression.modelToBoolean(Expression.java:179)
        at freemarker.core.Expression.evalToBoolean(Expression.java:162)
        at freemarker.core.Expression.evalToBoolean(Expression.java:147)
        at freemarker.core.AndExpression.evalToBoolean(AndExpression.java:36)
        at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)
        at freemarker.core.Environment.visit(Environment.java:330)
        at freemarker.core.Environment.visit(Environment.java:336)
        at freemarker.core.Environment.process(Environment.java:309)
        at freemarker.template.Template.process(Template.java:384)
        at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:154)
        at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:580)
        at org.apache.struts2.components.UIBean.end(UIBean.java:539)
        at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:39)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005fcheckbox_005f4(service_005fparameter_jsp.java:5843)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005fif_005f20(service_005fparameter_jsp.java:5784)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005felse_005f4(service_005fparameter_jsp.java:5737)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005fif_005f18(service_005fparameter_jsp.java:5598)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005fif_005f3(service_005fparameter_jsp.java:1115)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspx_meth_s_005fiterator_005f0(service_005fparameter_jsp.java:930)
        at org.apache.jsp.setup.services.service_005fparameter_jsp._jspService(service_005fparameter_jsp.java:235)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:465)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:383)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:331)
        at org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:106)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1459)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
        at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1631)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:618)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624){code}
The error seems trivial, but why is an upgrade between 2.5.29 and 2.5.30 causing this to appear for internal Struts2 template files? We noted that more fixes for double eval were included in this release, but don't see why that would be causing this error to appear.

 



--
This message was sent by Atlassian Jira
(v8.20.7#820007)