Con esta guía vamos a poder crear páginas JSF que pueden ser accedidas sin necesidad de crear una sesión Web en el servidor.

Para poder crear páginas JSF, necesitamos crear un fichero XHTML, que contendrá una etiqueta <f:view>, para indicar que esa página no necesita sesión web, hay que indicar que la vista es transient :

<f:view transient="true">
    <!-- Contenido de la página -->

</f:view>


Cuando se activa esta configuración, entonces no podemos usar componentes de ámbito sesión, conversación o página. Solo se pueden usar componentes con ámbito evento (Request), stateless o aplicación.

Configuración en Aplicaciones FundeWeb v2

A partir del arquetipo de aplicaciones FundeWeb 2.0 versión 2.0.12, no es necesario realizar estas configuraciones.


En el fichero components.xml, tenemos que añadir el siguiente filtro:

<!-- Restful or no Session request -->
<web:no-session-request-filter disabled="false" installed="true" 
     regex-url-pattern="(/error|/error_cas|/portal|/politicaCookies|/politicaPrivacidad|/declaracionAccesibilidad|/fundeweb/40\d|/fundeweb/50\d|/fundeweb/accessLock|/fundeweb/error_auth_method|/fundeweb/error_no_auth)\.seam|/rest/.*|/javax\.faces\.resource/.*|/resources/.*"/>

donde indicamos las páginas web que no necesitan sesión web para poder visualizarse.

Si la aplicación contiene las páginas:

estas, se mueven a la carpeta raíz del modulo Web (carpeta /web/src/main/webapp). Además, tendremos que modificar las navegaciones a estas páginas, que suelen definirse en:


En la carpeta /layout, creamos una copia del fichero template.xhtml y la renombramos como template_transient_view.xhtml. Y realizamos las siguientes modificaciones:


Modificamos el template (normalmente /layout/template.xhtml) por /layout/template_transient_view.xhtml usado en los ficheros:


Se puede crear una página en la raiz del módulo Web (carpeta /web/src/main/webapp), llamada portal.xhtml, con el siguiente contenido:

<ui:composition template="/layout/template_transient_view.xhtml"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:s="http://jboss.org/schema/seam/taglib"
	xmlns:p="http://primefaces.org/ui"
	xmlns:pe="http://primefaces.org/ui/extensions"
	xmlns:fw="http://www.um.es/atica/fundeweb">

	<ui:define name="page-title">#{messages['value.link.home']} - #{messages['application.title']}</ui:define>

	<ui:define name="body">
		<!-- CONTENIDO -->
		<h1 class="titulo-pagina">Portal</h1>
		<p:panel header="header" footer="footer" menuTitle="menuTitle"
			toggleable="true" toggleTitle="toggleTitle" closable="true"
			closeTitle="closeTitle">
			
			<h:outputText value="Portal sin sesion web." />
			<br/>
			<p:link id="homeLink" outcome="home">
				<i class="fa fa-home fa-4x" style="color:#B02129;"></i>
				<br/>
				<h:outputText value="#{messages['value.link.home']}" style="color:#B02129; text-decoration:underline;"/>
			</p:link>
		
		</p:panel>
	</ui:define>
</ui:composition>


El contenido de esta página se puede cargar con la información que se desee. Incluso puede ser el objetivo configurado en el fichero index.html.

Si la aplicación tiene en la carpeta raíz del módulo Web (carpeta /web/src/main/webapp) un fichero robots.txt (sino, se puede crear con la guía Creación y configuración de ficheros robots.txt), este, se puede dejar con esta configuración:

User-agent: *
Disallow: /
Allow: /contexto_aplicacion/index.html
Allow: /contexto_aplicacion/portal.seam
Allow: /contexto_aplicacion/declaracionAccesibilidad.seam
Allow: /contexto_aplicacion/politicaCookies.seam
Allow: /contexto_aplicacion/politicaPrivacidad.seam
Crawl-delay: 10

El valor de contexto_aplicacion, es propio de la aplicación, es decir, que no no solo hay que pegar el contenido del fichero, también hay que modificarlo para que sea correcto para la aplicación.