You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@tiles.apache.org by "Aris Tzoumas (JIRA)" <ji...@apache.org> on 2009/10/21 20:41:50 UTC

[jira] Updated: (TILES-482) Wildcard configuration doesn't work with cascaded attributes

     [ https://issues.apache.org/struts/browse/TILES-482?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aris Tzoumas updated TILES-482:
-------------------------------

    Attachment: 482.patch

patch for tiles v 2.1.4

> Wildcard configuration doesn't work with cascaded attributes
> ------------------------------------------------------------
>
>                 Key: TILES-482
>                 URL: https://issues.apache.org/struts/browse/TILES-482
>             Project: Tiles
>          Issue Type: Bug
>          Components: tiles-core
>    Affects Versions: 2.1.3, 2.1.4
>         Environment: Windows, WAS 6.1, Struts 2
>            Reporter: Aris Tzoumas
>            Priority: Critical
>         Attachments: 482.patch
>
>
> I found out that when creating a wildcard configuration with a cascade="true" attribute inside, this attribute doesn't actualy apply to the actual resulting cached configuration.
> Sample configuration xml:
> <definition name="abstract.one" template="/WEB-INF/jsp/one.jsp">
> </definition>
> <definition name="abstract.two" template="/WEB-INF/jsp/two.jsp">
> </definition>
> <definition name="*.*.*" extends="abstract.one">
>   <put-attribute name="abstract.one-param1" value="/WEB-INF/jsp/param1.jsp" />
>   <put-attribute name="abstract.one-param2" value="abstract.two" />
>   <put-attribute name="abstract.two-param1" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" cascade="true"/>
> </definition>
> Looking at the source code, the problem seems to be in method replaceDefinition of class CachingLocaleUrlDefinitionDAO.java
> If I replace the method to the following, everything is ok:
> protected Definition replaceDefinition(Definition d, String name,
>             Map<Integer, String> vars) {
>         Definition nudef = new Definition();
>         nudef.setExtends(replace(d.getExtends(), vars));
>         nudef.setName(name);
>         nudef.setPreparer(replace(d.getPreparer(), vars));
>         nudef.setTemplateAttribute(replaceVarsInAttribute(d
>                 .getTemplateAttribute(), vars));
>         Set<String> localAttributeNames = d.getLocalAttributeNames();
>         if (localAttributeNames != null && !localAttributeNames.isEmpty()) {
>             for (String attributeName : localAttributeNames) {
>                 Attribute attr = d.getLocalAttribute(attributeName);
>                 Attribute nuattr = replaceVarsInAttribute(attr, vars);
>                 nudef.putAttribute(replace(attributeName, vars), nuattr);
>             }
>         }
>         
>         /** this is my hack! **/
>         Set<String> cascadedAttributeNames = d.getCascadedAttributeNames();
>         if (cascadedAttributeNames != null && !cascadedAttributeNames.isEmpty()) {
>             for (String attributeName : cascadedAttributeNames) {
>                 Attribute attr = d.getCascadedAttribute(attributeName);
>                 Attribute nuattr = replaceVarsInAttribute(attr, vars);
>                 nudef.putAttribute(replace(attributeName, vars), nuattr, true);
>             }
>         }
>         return nudef;
>     }
> Please fix it in next version of Tiles 2.1.x. I don't know if this is working in Tiles 2.2.x, since there is no Struts plugin for Tiles 2.2.x yet.... (who should I blame?)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.