支持通配符的嵌套磁贴
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 时
问题是嵌套定义 "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
磁贴配置:
<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 时
问题是嵌套定义 "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