Come utilizzare la composizione Facelets con i file da un altro contesto

Ho un’applicazione che usa la composizione (per i modelli di pagina). Ma pensiamo di creare un’applicazione web (war) per ospitare tutti i modelli condivisi da tutte le applicazioni nello stesso host di tutte le applicazioni.

Come posso includere un modello da un altro contesto? In questo momento utilizzo l’importazione dalla richiesta http. Ma suona male.

Sto usando JBoss Seam 2.x con JSF 1.

Si noti che questo deve essere fatto in modo diverso in Facelets JSF 2.x, vedere questa risposta per i dettagli.

Questo è ansible con un risolutore di risorse Facelets personalizzato. Non li risolverei solo tramite HTTP, ma solo dal classpath. Basta pacchettizzare i modelli condivisi, ad esempio nella cartella /META-INF/resources del file JAR e rilasciare la class resolver nello stesso JAR. Infine distribuisci questo JAR tra tutte le applicazioni web.

 package com.example; import java.net.URL; import com.sun.facelets.impl.DefaultResourceResolver; public class FaceletsResourceResolver extends DefaultResourceResolver { private String basePath; public FaceletsResourceResolver() { this.basePath = "/META-INF/resources"; // TODO: Make configureable? } public URL resolveUrl(String path) { URL url = super.resolveUrl(path); // Resolves from WAR. if (url == null) { url = getClass().getResource(basePath + path); // Resolves from JAR. } return url; } } 

Registralo su web.xml come segue:

  facelets.RESOURCE_RESOLVER com.example.FaceletsResourceResolver