支持通配符的嵌套磁贴

Nested Tiles with Wildcard Support

磁贴配置:


<definition name="*/*/*/*/*/index" extends="defaultLayout.{1}.{2}.{4}">
    <put-attribute name="headerLocationPart" >
    <definition name="indexLocation"  template="/{1}/{2}/mkportal/s/layouts/LocationLayout.jsp">
        <put-attribute name="location" value="/{1}/{2}/mkportal/s/location.jsp" />
        <put-attribute name="subscriptionBtn" value="/{1}/{2}/mkportal/s/subscriptionBtn.jsp" />
        <put-attribute name="indexPromo" value="/{1}/{2}/mkportal/s/indexPromo.jsp" />
        </definition>
  </put-attribute>
    <put-attribute name="body" value="/{1}/{2}/mkportal/s/index.jsp" />
</definition>

当我要从浏览器中点击 URL 时

http://localhost:8080/etisalat/wap/mkportal/s/index.wfv

问题是嵌套定义 "indexLocation" 没有解析 {1},{2} 参数。


错误是


org.apache.tiles.impl.CannotRenderException: JSPException including path '/{1}/{2}/mkportal/s/layouts/LocationLayout.jsp'.

所以我需要通过通配符值来解析嵌套图块定义的解决方案。

匿名定义不能有通配符,因为它们没有名称。

您可以在此处采用两种不同的方法 (我不知道哪个适合你,因为我不知道你在做什么)

1) 您可以使用 cascading="true" 属性而不是像...

这样的附加定义
<definition name="*/*/*/*/*/index" extends="defaultLayout.{1}.{2}.{4}">
    <put-attribute name="headerLocationPart" template="/{1}/{2}/mkportal/s/layouts/LocationLayout.jsp"/>
    <put-attribute name="location" value="/{1}/{2}/mkportal/s/location.jsp" cascade="true"/>
    <put-attribute name="subscriptionBtn" value="/{1}/{2}/mkportal/s/subscriptionBtn.jsp" cascade="true"/>
    <put-attribute name="indexPromo" value="/{1}/{2}/mkportal/s/indexPromo.jsp" cascade="true"/>
    <put-attribute name="body" value="/{1}/{2}/mkportal/s/index.jsp" />
</definition>

2) 您可以使用命名定义,例如...

    <definition name="indexLocation.*.*"  template="/{1}/{2}/mkportal/s/layouts/LocationLayout.jsp">
        <put-attribute name="location" value="/{1}/{2}/mkportal/s/location.jsp" />
        <put-attribute name="subscriptionBtn" value="/{1}/{2}/mkportal/s/subscriptionBtn.jsp" />
        <put-attribute name="indexPromo" value="/{1}/{2}/mkportal/s/indexPromo.jsp" />
    </definition>

<definition name="*/*/*/*/*/index" extends="defaultLayout.{1}.{2}.{4}">
    <put-attribute name="headerLocationPart" value="indexLocation.{1}.{2}"/>
    <put-attribute name="body" value="/{1}/{2}/mkportal/s/index.jsp" />
</definition>

参考:http://tiles.apache.org/framework/tutorial/advanced/nesting-extending.html