2012-11-13 22 views
5

Sto usando le tessere nell'applicazione struts2. Durante la definizione del layout di base ho definito un attributo "scriptFile".Come verificare l'esistenza dell'attributo tile prima di inserirlo nella pagina

<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> 

Se sviluppatore fornisce "FileScript" nel file di definizione piastrelle, "tiles.xml", questo file di script deve essere incluso utilizzando seguente riga

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

Ma se l'attributo FileScript non è definito, questa linea deve essere saltato.

Come è possibile verificare l'esistenza dell'attributo "scriptFile" nelle tile. C'è un modo migliore per fare questa cosa?

+0

Quale versione di piastrelle stai usando? Da dove viene l'attributo scriptFile? È qualcosa che è dinamico in fase di esecuzione?Se si tratta solo di definizioni di tile, è necessario creare diversi modelli "head" e includere l'intestazione appropriata, se si utilizza un head che richiede di fornire uno scriptFile allora sarà necessario fornire un file di script. Se un'azione di tipo struts2 richiede un id per fare il suo lavoro, non si può benissimo non inviare un id e aspettarsi che funzioni (lo stesso vale per le tessere). Se questo è contenuto dinamico ci sono altre possibilità. – Quaternion

+0

versione = tessere 2.0.6. l'attributo deriva da tiles.xml e non è dinamico. Il layout è costituito da Intestazione pagina, Menu, Contenuto e piè di pagina. solo i contenuti saranno modificati per ogni pagina. Se il contenuto richiede javascript, lo sviluppatore fornirà quel file JS e lo definirà in tiles.xml. Questo file javascript verrà quindi incluso nell'intestazione della pagina. –

risposta

0

Basta usare ignore attributo

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

e non mettere scriptFile nella definizione.

Aggiornamento

Come sull'utilizzo getAsString tag nel layout poi

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

e nella definizione di mettere l'intera sfuggito tag script.

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

l'attributo ignora salta semplicemente posizionando il valore dell'attributo se non è presente. In questo caso il tag '. –

+0

Aggiornato la mia risposta. –

+0

Potrebbe funzionare ma penso che non sia una buona idea fornire ogni volta un tag completo come stringa invece di definire solo il nome del file. Se viene indicato il nome del file, il tag dello script circostante deve essere posizionato dal modello per ridurre lo sforzo e le possibilità di errore. –

3

Ho provato

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

JSTL può anche essere usato qui.

+0

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

1

Sono stato in grado di risolvere un problema simile utilizzando l'attributo defaultValue. In questo modo, non riceverai un'eccezione se l'attributo non esiste. In questo caso, se la pagina non ha bisogno di includere più JavaScript quindi il modello piastrelle sarà solo aggiungere una stringa vuota

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 modello 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

Ho usato il seguente codice per risolvere questo problema (solo in base alle informazioni che ho ricevuto dalla descrizione delle etichette: ignora - Se questo attributo è impostato su true e l'attributo specificato dal nome non esiste, è sufficiente tornare senza scrivere nulla. Il valore predefinito è falso, il che causerà un'eccezione di runtime pari a generata.):

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

P.S. Stai attento, usa $ {true} con valore solo "vero".