我正在使用Struts2(2.3.4.1)和tiles(2.0.6)框架创建Web应用程序。我的tiles.xml
使用典型的基本定义,其他定义继承自:
<!-- SHARED LAYOUT -->
<definition name="sharedLayout" template="/shared/jsp/Base.jsp">
<put-attribute name="pageHeader" value="/shared/jsp/Header.jsp"/>
<put-attribute name="pageContent" value=""/>
<put-attribute name="pageFooter" value="/shared/jsp/Footer.jsp"/>
<put-attribute name="pageCss" value="" type="string"/>
</definition>
<!-- INDEX -->
<definition name="/Index.tiles" extends="sharedLayout">
<put-attribute name="pageContent" value="/shared/jsp/Index.jsp"/>
<put-attribute name="pageCss" value="{'/css/index.css','/css/index_extra.css','/css/index_buttons.css'}" type="string"/>
</definition>
我使用tiles属性&#34; pageCss&#34;要定义索引页应该使用的css文件数组,如下所示:
<put-attribute name="pageCss" value="{'/css/index.css','/css/index_extra.css','/css/index_buttons.css'}" type="string"/>
在<head></head>
的{{1}}部分,我使用以下代码将该字符串转换为正确的base.jsp
:
<link>'s
不幸的是,这并不像预期的那样奏效。它不是迭代器遍历数组元素,而是认为数组是一个大字符串而不是数组,它只会迭代超过1个元素,因为它认为它是一个元素而不是数组。因此,我只使用一个严重格式错误的网址(因为它只是<s:set var="pageCssArray"><tiles:getAsString name='pageCss'/></s:set>
<s:iterator value="%{#pageCssArray}">
<s:set var="CurrentCss"><s:property/></set>
<link type="text/css" href="<s:url value='%{#CurrentCss}'/>" rel="stylesheet"/>
</s:iterator>
中定义的字符串),而不是3 <link>
而是<link>
。为什么迭代器不将字符串视为正确的数组,我确实使用了tiles.xml
表示法?
所以我需要的是一种在tile定义中定义任意数量的css文件的方法,以及jsp页面动态创建每个文件的相应链接。
答案 0 :(得分:0)
您可以使用value
属性设置变量。
<s:set var="pageCssArray" value="{'/css/index.css','/css/index_extra.css','/css/index_buttons.css'}">
并在jsp中使用它,或像我之前的answer一样解析此字符串。