使用带有tile的Struts2为每个页面定义多个css文件

时间:2014-04-30 15:59:43

标签: jsp struts2 iterator tiles

我正在使用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页面动态创建每个文件的相应链接。

1 个答案:

答案 0 :(得分:0)

您可以使用value属性设置变量。

<s:set var="pageCssArray" value="{'/css/index.css','/css/index_extra.css','/css/index_buttons.css'}">

并在jsp中使用它,或像我之前的answer一样解析此字符串。