Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-4663

NullPointerException when displaying a form without action attribute

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.3.28, 2.3.29, 2.3.30
    • Fix Version/s: 2.5.12
    • Component/s: None
    • Labels:
      None

      Description

      Hello,

      I'm currently trying to upgrade Struts from V2.3.20 to V2.3.30.
      Starting from V2.3.28, I'm having a yellow FreeMarker stack at the end of some pages. These pages have a <s:form> tag without "action" attribute.

      Here is some part of the displayed error :

      Java method "org.apache.struts2.components.Form.getValidators(String)" threw an exception when invoked on org.apache.struts2.components.Form object "org.apache.struts2.components.Form@3d354929"; see cause exception in the Java stack trace.
      FTL stack trace ("~" means nesting-related):
      	- Failed at: #list tag.getValidators("\$\{tagName\}"...  [in template "template/~~~css_xhtml/form-close-validate.ftl" at line 66, column 9]
      	- Reached through: #include "/\$\{parameters.templateDir\}...  [in template "template/xhtml/form-close.ftl" at line 25, column 1]
      ...
      Caused by: java.lang.NullPointerException
      	at org.apache.struts2.util.ComponentUtils.containsExpression(ComponentUtils.java:51)
      	at org.apache.struts2.components.Component.findValue(Component.java:376)
      	at org.apache.struts2.components.Component.findString(Component.java:226)
      	at org.apache.struts2.components.Form.getValidators(Form.java:276)
      

      Here are the results of my research :

      • When the method org.apache.struts2.components.Form.getValidators(String name) is called at the end of the page display, the "action" var is null.
      • findString(action) is called, leading to org.apache.struts2.components.Component.findValue(String expr, Class toType) with expr=null
      • Starting from V2.3.28, a new condition has been added to this method : if (ComponentUtils.containsExpression(expr)). This raises the NPE.

      Is this a bug, or am I doing something wrong ?

      Thanks in advance,
      Yan

        Attachments

          Activity

            People

            • Assignee:
              lukaszlenart Lukasz Lenart
              Reporter:
              Yan Soulliaert Yan Soulliaert
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: