Tiles
  1. Tiles
  2. TILES-534

Wildcarding interferes with EL Expressions in put-attribute

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.2
    • Fix Version/s: 2.2.3, 3.0.0
    • Component/s: tiles-core, tiles-el
    • Labels:
      None

      Description

      I'm trying to create a Tiles definition that uses wildcards (regex) as well as an EL expression. It appears that the placeholder replacement for wildcards is interpreting the EL expression as an invalid placeholder instead of leaving it alone. This looks to be related to TILES-502.

      I've created the pattern definition resolver and EL expression support as described on the websit (http://tiles.apache.org/framework/tutorial/advanced/wildcard.html and http://tiles.apache.org/framework/tutorial/advanced/el-support.html, respectively). My tiles definition looks like the following:

      <definition name="REGEXP.*)Body" template="/WEB-INF/jsp/

      {1}

      /index.jsp">
      <put-attribute name="pageContent" expression="EL:/WEB-INF/jsp/$

      {website.template.name}

      /$

      {currentPage.name}

      .jsp"/>
      </definition>

        Activity

        Hide
        David Hay added a comment -

        This is the stack trace I get when evaluating the definition.

        java.lang.IllegalArgumentException: Illegal group reference
        java.util.regex.Matcher.appendReplacement(Matcher.java:713)
        java.util.regex.Matcher.replaceFirst(Matcher.java:861)
        java.lang.String.replaceFirst(String.java:2146)
        org.apache.tiles.definition.pattern.PatternUtil.replace(PatternUtil.java:227)
        org.apache.tiles.definition.pattern.PatternUtil.replaceVarsInSimpleAttribute(PatternUtil.java:166)
        org.apache.tiles.definition.pattern.PatternUtil.replaceVarsInAttribute(PatternUtil.java:143)
        org.apache.tiles.definition.pattern.PatternUtil.replacePlaceholders(PatternUtil.java:90)
        org.apache.tiles.definition.pattern.regexp.RegexpDefinitionPatternMatcher.createDefinition(RegexpDefinitionPatternMatcher.java:71)

        Show
        David Hay added a comment - This is the stack trace I get when evaluating the definition. java.lang.IllegalArgumentException: Illegal group reference java.util.regex.Matcher.appendReplacement(Matcher.java:713) java.util.regex.Matcher.replaceFirst(Matcher.java:861) java.lang.String.replaceFirst(String.java:2146) org.apache.tiles.definition.pattern.PatternUtil.replace(PatternUtil.java:227) org.apache.tiles.definition.pattern.PatternUtil.replaceVarsInSimpleAttribute(PatternUtil.java:166) org.apache.tiles.definition.pattern.PatternUtil.replaceVarsInAttribute(PatternUtil.java:143) org.apache.tiles.definition.pattern.PatternUtil.replacePlaceholders(PatternUtil.java:90) org.apache.tiles.definition.pattern.regexp.RegexpDefinitionPatternMatcher.createDefinition(RegexpDefinitionPatternMatcher.java:71)
        Hide
        David Hay added a comment -

        Changing PatternUtil line 227 from 'replaceFirst' to 'replace' appears to solve the problem. In addition, it avoids the Pattern compile for each replacement.

        Show
        David Hay added a comment - Changing PatternUtil line 227 from 'replaceFirst' to 'replace' appears to solve the problem. In addition, it avoids the Pattern compile for each replacement.
        Hide
        Mck SembWever added a comment -

        thanks David. committed to 2.2.x branch and trunk

        Show
        Mck SembWever added a comment - thanks David. committed to 2.2.x branch and trunk

          People

          • Assignee:
            Mck SembWever
            Reporter:
            David Hay
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development