2012-11-13 17 views
5

我在struts2應用程序中使用瓷磚。在定義基本佈局時,我定義了一個屬性「scriptFile」。如何在插入頁面之前檢查瓷磚屬性的存在

<definition name="baseLayout" template="/application/base-layout.jsp" > 
    ... 
</definition> 

<definition name="custom.tiles" extends="baseLayout"> 
    <put-attribute name="scriptFile" value="js/custom-script.js"></put-attribute> 
</definition> 

如果開發商在瓷磚定義文件提供了「腳本文件」,「tiles.xml」,這個腳本文件應該使用以下行被列入

<script language="javascript" src="<tiles:insertAttribute name="scriptFile"></tiles:insertAttribute>"></script> 

但是,如果沒有定義腳本文件的屬性,這條線必須跳過。

如何檢查瓷磚中是否存在「scriptFile」屬性。有沒有更好的方法來做這件事?

+0

你使用什麼版本的瓷磚? scriptFile屬性來自哪裏?運行時是否是動態的?如果這只是一個tile定義,你應該創建幾個「head」模板,並且包含適當的頭文件,如果你使用一個需要你提供scriptFile的頭文件,那麼你將需要提供一個腳本文件。如果一個struts2動作需要一個id來完成它的工作,你不能很好地發送一個id並期望它能夠工作(對於tile而言)。如果這是動態內容,還有其他可能性。 – Quaternion

+0

version = tiles 2.0.6。屬性來自tiles.xml,並且不是動態的。佈局由頁面標題,菜單,內容和頁腳組成。每個頁面只會更改內容。如果內容需要任何JavaScript,開發人員將提供該JS文件並在tiles.xml中定義它。這個JavaScript文件將被包含在頁眉中。 –

回答

0

只需使用ignore屬性

<script language="javascript" src="<tiles:insertAttribute name='scriptFile' ignore='true'/>"></script> 

,不要把scriptFile在你的定義。

更新

如何佈局使用getAsString標籤然後

<tiles:getAsString name="jscript" ignore="true" /> 

和定義把整個逃脫腳本標籤。

<put-attribute name="jscript" value="&lt;script src='js/custom-script.js' type='text/javascript'>&lt;/script>" /> 
+0

忽略屬性只是跳過放置屬性的值,如果它不存在。在這種情況下,圍繞'。 –

+0

更新了我的答案。 –

+0

它可能工作,但我認爲每次提供完整的標籤作爲一個字符串不是一個好主意,而不是定義文件名。如果給出了文件名,模板應該放置周圍的腳本標記,以減少錯誤的發生和出錯機會。 –

3

我試圖

<t:useAttribute name="scriptFile" id="script" classname="java.util.List" ignore="true"/> 
<% 
    if(script != null) { 
     ... include script 
    } 
%> 

JSTL也可以在這裏使用。

+0

http://mail-archives.apache.org/mod_mbox/struts-user/200304.mbox/%[email protected]%3E –

1

我能夠通過使用defaultValue屬性來解決類似的問題。這樣,如果屬性不存在,您將不會收到異常。在這種情況下,如果頁面不需要包括備用的JavaScript,然後瓦片模板將只需要添加一個空字符串

JSP

<tiles:insertDefinition name="portalTemplate"> 

    <tiles:putAttribute name="body"> 
     <h1>Body</h1> 
    </tiles:putAttribute> 

    <tiles:putAttribute name="js"> 
     <script src="script.js"></script> 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

Tiles模板JSP

<html> 
<body> 
    <tiles:insertAttribute name="body"/> 
    <script src="/public/libs/jquery/jquery-2.1.1.min.js"></script> 

    <!-- Include extra JS after JQuery --> 
    <tiles:insertAttribute name="js" defaultValue=""/> 
</body> 
</html> 
0

我使用下面的代碼來解決這個問題(根據我從標籤描述得到的信息: ignore - 如果此屬性設置爲true,並且屬性由 指定的名稱不存在,只需返回而不寫任何內容。 默認值爲false,這會導致拋出運行時異常爲 。 ):

<tiles:importAttribute name="stylesheets" ignore="${true}"/> 

P.S.請小心,只使用「true」值的$ {true} intead。

相關問題