SEO-friendly URLs con Seam II
Vamos a ampliar la información del post anterior con conceptos más avanzados.
Partimos de la base de que tenemos configurado y funcionando el módulo UrlRewrite.
El primer problema con el que me topé es que mi aplicación usaba identificadores numéricos, tipo .../product.seam?idProduct=123. Por lo tanto necesitaba traducir el identificador numerico a una palabra descriptiva del producto, como .../product/silla o .../product/mesa.
Afortunadamente con Seam eso no presenta mucha dificultad y puede emplearse una EL Expression tipo #{rewriter.fromNameToId('silla')}.
Por desgracia, en el archivo urlrewrite.xml no pueden incluirse EL Expressions.
Para solucionarlo, creé una 'página virtual' en el pages.xml que recogía los parámetros como String de la url y mediante una llamada a un componente de Seam los traducía en el correspondiente identificador numérico, aprovechando que en el archivo pages.xml sí que se pueden usar EL Expressions.
- Fichero urlrewrite.xml
-
<urlrewrite>
-
<rule>
-
<from>^/pruduct/([A-Za-z]*)$</from>
-
<to last="true">/virtual_product.seam?name=$1</to>
-
</rule>
-
</urlrewrite>
-
- Fichero pages.xml
-
.....
-
<page view-id="/virtual_product.xhtml" action="#{product.init}">
-
<param name="name"/>
-
<navigation>
-
<redirect view-id="/product.seam">
-
<param name="idProduct" value="#{urlRewriter.idProductFromName(name)}"/>
-
</redirect>
-
</navigation>
-
</page>
-
.....
-
- Componente rewrite
-
// Consulta en la bbdd para halar
-
// el id del producto a partir del nombre
-
}
