2012-03-17 10 views
16

Sto cercando un framework che sia migliore e più facile da usare rispetto alle piastrelle Apache (che fino ad ora, ho usato un paio di volte).Migliore alternativa alle piastrelle Apache

Con Tiles, sembra che quando ho 100 azioni devo creare 100 file jsp e creare 100 definizioni in tiles.xml.

Esiste un framework migliore per gestire i miei modelli? Voglio creare, ad esempio, 2 modelli:

a) menu e colonna per i contenuti
b) del menu, colonna per i contenuti, colonna di destra con la bandiera

In entrambi i template del menu è costante. In template b, la colonna destra è costante, quindi solo la colonna del contenuto è diversa. Per questo semplice esempio I non si desidera definire ogni file JSP che estende lo template a (solo per fornire un corpo). Quello è zoppo imo. O forse sono un po 'zoppo e posso definire un modello DEFAULT in Apache Tiles e non lo sto usando nel modo giusto. In ogni caso, tutto l'aiuto apprezzato.

+3

credo che nel tuo caso SiteMesh può essere un approccio migliore dal momento che quello che vi serve è semplice, solo due modelli. Una volta impostato, puoi dimenticartene. – jddsantaella

risposta

6

Ho finito per utilizzare JSF + Facelets. Li ho combinati con Spring MVC e funziona come un fascino.

+1

Non è possibile combinare un framework MVC con un altro. È un fraintendimento di idee. JSF è framework MVC uguale a Spring MVC. Molto probabilmente hai composto Spring con JSF MVC. Una spiegazione migliore è descritta qui: http://stackoverflow.com/questions/18744910/using-jsf-as-view-technology-of-spring-mvc –

7

Un altro approccio è Sitemesh. È stato progettato per creare viste mesh in cui non è possibile modificare l'originale, quindi è più una struttura di trasformazione/decorazione HTML rispetto a un framework di template come Tiles.

A mio parere personale, Tiles è l'approccio migliore per le appli- cazioni e vorrei provare a implementare una sorta di resolver (basato su alcune convenzioni di denominazione) che rende obsoleti i file xml, ma questa non era la domanda.

@Vedere: This old introductions mostra come funziona SiteMesh.

+0

ok ma mi piacerebbe avere un motore di template con questo tipo di resolver. C'è qualcosa del genere? – Fixus

+0

Non lo so, ma mi aspetto che il modo in cui il resolver risolve la vista sia molto dipendente dall'applicazione, e dall'altra mi aspetto che non sia difficile scriverne uno. – Ralph

+0

Sì, Tiles-3 è dotato dell'abilità risolutiva menzionata. Acquista il tutorial ... (http://tech.finn.no/the-ultimate-view-tiles-3/) – mck

-2

Sulla base dell'esperienza, ho fortemente raccomandato Apache Wicket.

+2

Potresti elaborare un altro motivo per cui è così? – joergl

7

(simile a this)

Non avete bisogno di una definizione per ogni azione.

Questa configurazione di targa è un riaggancio da piastrelle-1 giorni. Non è davvero necessario con tiles-2 quando sono stati introdotti i caratteri jolly, e specialmente con tiles-3 insieme a OptionsRenderer.

Ecco un tutorial che vi aiuterà con

  • primavera per l'integrazione di piastrelle,
  • definizioni con caratteri jolly,
  • di attuazione di un modello di ripiego utilizzando l'OptionsRenderer, e
  • composizione definizioni.
14

Nel complesso, consiglierei SiteMesh su Piastrelle.

Here's come impostare SiteMesh 3

È possibile utilizzare le piastrelle per i modelli in-page, ma utilizzare SiteMesh per il modello a livello di sito. Tuttavia ...

Come rendere Tiles succhiare meno:

  1. Usa convenzione sulla configurazione. Ad esempio, inserisci le tue definizioni in webapp/WEB-INF/tiles.xml e non c'è bisogno di dire alle piastrelle dove si trova.

  2. Utilizzare i caratteri jolly:

<definition name="default" template="/WEB-INF/templates/default.jsp"> 
    <put-attribute name="titleKey" value=""/> 
    <put-attribute name="body" value=""/> 
</definition> 

<definition name="*" extends="default"> 
    <put-attribute name="titleKey" value="{1}.title"/> 
    <put-attribute name="body" value="/WEB-INF/views/{1}.jsp" /> 
</definition> 

Se le vostre dichiarazioni controller della vista nome index, abbinerà la definizione *, e utilizzare il file JSP /WEB-INF/views/index.jsp per il corpo e utilizzare la proprietà del messaggio index.title.

Se le vostre dichiarazioni controller della vista nome contact-us, che corrisponderà alla definizione *, e utilizzare il file JSP /WEB-INF/views/contact-us.jsp per il corpo, e utilizzare la proprietà messaggio contact-us.title

Nel modello, aggiunge:

<c:set var="titleKey"><tiles:getAsString name="titleKey" /></c:set> 

e

<title><spring:message code="${titleKey}"/></title> 

Aggiungi ReloadableResourceBundleMessageSource fagioli al vostro ap servlet contesto di plicatura.

creare un file /src/main/resources/messages.properties, con contenuti come:

index.title = Welcome to Acme, Inc. 
contact-us.title = Contact Us 
+3

+1. Molto utile, ma cosa succede se hai più modelli default.jsp? Le piastrelle non saprebbero come distinguere tra loro con i caratteri jolly, giusto? Come nel caso dell'OP, ha due modelli. (Mi rendo conto che nel suo caso può semplicemente ignorare, ma non è sempre qualcosa che vuoi fare). – bphilipnyc