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

struts2-jquery-plugin custom tag templates broken

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Implemented
    • Affects Version/s: 2.3.16.1
    • Fix Version/s: 2.3.20
    • Component/s: None
    • Labels:
      None
    • Environment:

      Struts 2.3.16.1, struts2-jquery-plugin 3.7.0, tomcat v7.0

      Description

      Hi,
      I am developing an application which has been predominantly written with Struts2 version 2.3.15.3 and the struts2-jquery-plugin version 3.6.1.
      I have recently upgraded to Struts2 version 2.3.16.1 and struts2-jquery-plugin version 3.7.0.
      The application has used the css_xhtml theme throughout, defined in struts.xml.
      Since the upgrade, the HTML markup of the struts2-jquery-plugin ( sj: ) components has been adversly affected.
      I have debugged the application and found that the issue is caused by the changes made to themes under WW-4145.
      The situation appears to be this:
      The struts2-jquery-plugin has implemented custom tags for their components and these classes will return the value of 'jquery' in response to the getTheme() method. They do appear to correctly store a 'parentTheme' parameter with the correct value (in my case from the parent form element) of 'css_xhtml'.
      The struts2-jquery-plugin custom templates are successfully found on the templates/jquery path, but some of them contain 'include' statements, for example, the datepicker.ftl contains the following snippet:

      <#if parameters.parentTheme == 'css_xhtml'>
      <#include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" />
      </#if>
      

      So, at this point, all is well, the correct controlheader.ftl template for the css_xhtml theme is found and included, however this template (now) contains the following include:

       
      <#include "/${parameters.templateDir}/${parameters.expandTheme}/controlheader-core.ftl">
      

      And this is where it starts to go wrong. The

      ${parameters.expandTheme}

      resolves to '~~~jquery' and, after reading the WW-4145 change info, I understand that this will cause the ThemeManager to load the template from the parent theme as defined in the theme.properties file. This, in the case of the struts2-jquery-plugin, is defiend as 'xhtml' and NOT 'css_xhtml' as discovered from the parent form component. Consequently, the wrong controlheader-core.ftl template is included, and the resulting HTML includes incorrect <tr> and <td> tags which ultimately break the page.

      Other than hacking the templates, I cannot see a satisfactory way of resolving this problem, so any assistance would be gratefully received.

      Thanks
      Steve

        Attachments

        1. struts2-example-0.0.1-project.zip
          17 kB
          Steven James
        2. http-response.png
          206 kB
          Steven James

          Activity

            People

            • Assignee:
              lukaszlenart Lukasz Lenart
              Reporter:
              casualty Steven James
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: