2013-01-21 14 views
9

In JSF è possibile mappare il Servlet Faces a vari pattern URL. Per esempio. a *.xhtml.Mappatura di file .xhtml JSF su nessuna estensione

Quello che voglio tuttavia è mappare il Servlet Faces a senza estensione. Significato, se ho una pagina customers.xhtml nella mia web root, vorrei richiedere questo utilizzando http://example.com/customers.

Ho esaminato la domanda How do I configure JSF url mappings without file extensions? e questo funziona in una certa misura, ma mi richiede di mappare ogni file che ho individualmente (correggimi se ho torto).

Come è possibile mappare tutti i file .xhtml in una volta sul servlet Faces senza doverli mappare singolarmente?

risposta

9

Questo non è possibile utilizzando i mezzi standard. Fondamentalmente hai bisogno di un homebrewing servlet filter che è mappato su /* e controlla se l'URL di richiesta corrente è senza estensione e se è così, quindi esegui una chiamata RequestDispatcher#forward() sull'URL con l'estensione del file aggiunta (sai, un forward non modifica il URL di richiesta corrente come farebbe un reindirizzamento). È inoltre necessario un personalizzato view handler per produrre gli URL senza estensione desiderate per JSF <h:form>, <h:link>, ecc

In alternativa, è possibile utilizzare PrettyFaces o OmniFaces' FacesViews in modo che non c'è bisogno di reinventare la ruota. Nella parte inferiore della pagina della vetrina di FacesViews puoi trovare alcuni collegamenti facili direttamente al codice sorgente che possono darti qualche spunto.

+0

Ho cercato sul web esattamente quello che stai dicendo. Ti capita di sapere se è previsto che le future versioni di JSF contempleranno questo tipo di funzionalità? –

+1

@ João: Ci sono [piani concreti] (https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1260) per integrare FacesViews in JSF standard. Ma molto dipende dall'API Servlet 4.0 e dal tempo/risorse disponibili. – BalusC

Problemi correlati