Navegación dinámica en PrimeFaces y JSF 2.0

Cuando pasamos a utilizar JSF 2.0 nos encontramos por un lado una amplia curva de aprendizaje y por el otro un reutilización y abstracción enorme de componentes listos para usar.
Si a estos le incorporamos alguna librería que pueda extender y agregar funcionalidad (Ajax, por ejemplo)  mucho mejor.
En B3 deliberamos mucho si usar GWT, JSF, Struts e incluso Ruby.
PrimeFaces fue el detonante a la hora de inclinarnos por JSF. Una muy buena propuesta de nuestros amigos turcos.
Después de mucho desarrollo en la vista del modelo nos topamos con un particular problema. La navegación.
Esta tiene que ser dinámica, veloz y mantener la sesión.
Después de tener unas 15 páginas .xhtml fragmentadas nos dimos cuenta que la navegación clásica fue insufrible en clientes web remotos. Que hacemos?
JQuery, Prototype o simplemente AJAX no funcionan. No son simples páginas, tienen todo un proceso que cumplir.
No obstante podemos arreglarnos con este ejemplo:
En cada LINK que deseemos cargar tendriamos algo así:

<p:commandLink value=”PAGINA”

action=”#{bkNavegacion.navegador}”

oncomplete=”updateContent()”

update=”@none”>

<f:param name=”source” value=”./frmMiPaginaACargar.xhtml” />

</p:commandLink>

<p:remoteCommand name=”updateContent” process=”@none” update=”content” />

En la página principal, donde estaria el contenido tenemos:

<p:outputPanel id=”content” >

<ui:include src=”#{bkNavegacion.includePage}” />

</p:outputPanel>

Y finalmente el Backing bean debería tener el método:

public void navegador() {

HttpServletRequest request =
(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String source = request.getParameter(“source”);
includedPage= (source);

}

Esta combinación podrá lograr una carga liviana AJAX de páginas JSF 2.0 con PrimeFaces en una sola página contenedora.
Espera que sirva a nuestros colegas.

Anuncios