2010-01-06 19 views
7

Sono nuovo di JSP e sto cercando di ridurre una quantità enorme di codice tagliato e incollato.
In ogni pagina del progetto, ci sono circa 25 righe di JSP misti, tag Struts, tag JSTL e HTML, che sono stati tagliati e incollati in vari punti della pagina. Queste ~ 25 righe di codice riutilizzato sono non sono nemmeno lontanamente simili da pagina a pagina (e ci ~ 250 pagine), ma esattamente la stessa all'interno di ciascuna pagina. In definitiva questo codice (business logic) dovrebbe essere spostato fuori dalla View, ma farlo sarebbe un progetto più grande di quello che il mio programma consente al momento, quindi mi chiedo se c'è un modo semplice per riutilizzare Tag Misti + JSP all'interno di una pagina, come una correzione temporanea in modo che il codice possa essere refactored in più fasi, come il tempo lo consente.Come posso riutilizzare HTML/JSP all'interno di una pagina?

Per maggiore chiarezza, sto cercando un modo per codificare il codice incapsulato senza creare un nuovo file (/ locale all'ambito della pagina), ovvero deve essere definito nella stessa pagina da cui viene chiamato.

Alcuni hanno suggerito che questo può essere fatto con Piastrelle - se questo è il caso, per favore mostrami come.

risposta

2

è possibile creare un file include e jsp: includerlo ovunque sia necessario. le parti variabili possono essere eseguite con condizionali jsp, attributi EL jstl o puntoni EL.

Non vorrei necessariamente ricodificare le pagine esistenti perché funzionano già.

+0

Grazie per il suggerimento. Ho usato questo approccio come soluzione temporanea in precedenza, ma purtroppo in questo caso aumenterebbe significativamente il numero di pagine jsp nel progetto o creerebbe un pasticcio di condizionali. Il problema è che le pagine non funzionano davvero - mi è stato assegnato il compito di rendere il sito compatibile con il browser. Sto cercando di ridurre il tempo di debug riducendo il codice incollato durante la copia, riscrivendo solo ciò che deve essere riscritto per ora. –

7

Dai uno sguardo allo Apache tiles. Dato che stai lavorando con Struts, sono sorpreso che tu non l'abbia già trovato. È fondamentalmente un motore di template e penso che soddisfi le tue esigenze.

Il già suggerito <jsp:include> può essere utilizzato con <jsp:param> per passare le variabili. Come

<jsp:include file="includedFile.jsp"> 
    <jsp:param name="username" value="jsmith" /> 
</jsp:include> 

In realtà, se solo volendo includere 1 file con il codice comune, io consiglierei la semplicità del <jsp:include> sul potere di piastrelle.

+0

In realtà ho appena iniziato a usare le tessere per ripulire parte del codice qualche settimana fa, anche se non mi è familiare come avrei dovuto essere. È possibile creare una tessera e inserirla all'interno dello stesso file? Dal momento che il codice non è realmente strutturalmente o logicamente simile tra i file, spero in qualcosa che non richieda la creazione di file separati per l'incapsulamento, quindi posso effettuare il refactoring a tappe. –

1

Struts Tiles sono i migliori da utilizzare in Struts per modellare una pagina particolare in modo che la parte che è comune a tutte le pagine non deve essere codificato ogni volta. Vedere http://struts.apache.org/1.x/struts-tiles/.

Un altro approccio più semplice molto specifico per JSP è jsp: include come discusso in precedenza.

Solo per informazioni c'è un terzo approccio, che è l'approccio della direttiva include

Differenza tra jsp: include e comprendono direttiva è la seguente

Si dovrebbe usare la direttiva include (< @ include file relativeURL >) solo se 1) se il file include il testo statico 2) se il file viene modificato raramente (il motore JSP potrebbe non ricompilare JSP se questo tipo di file incluso viene modificato) 3) se si dispone di uno snippet di codice comune che puoi riutilizzare su più pagine (esintestazioni e piè di pagina)

si dovrebbe usare il jsp: include solo se 1) Il contenuto del JSP incluso è dinamico e può cambiare a runtime 2) per selezionare quali contenuti rendere in fase di esecuzione (in quanto la pagina e src gli attributi possono prendere espressioni di runtime)

Spero che questo ti aiuterà a decidere.

Problemi correlati