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
    1. <urlrewrite>
    2.    <rule>
    3.      <from>^/pruduct/([A-Za-z]*)$</from>
    4.      <to last="true">/virtual_product.seam?name=$1</to>
    5.    </rule>
    6.  </urlrewrite>

  • Fichero pages.xml
    1. .....
    2. <page view-id="/virtual_product.xhtml" action="#{product.init}">
    3.     <param name="name"/>
    4.     <navigation>
    5.         <redirect view-id="/product.seam">   
    6.             <param name="idProduct" value="#{urlRewriter.idProductFromName(name)}"/>
    7.         </redirect>
    8.     </navigation>
    9. </page>
    10. .....

  • Componente rewrite
    1. public int idProductFromName(String name) {
    2.     // Consulta en la bbdd para halar
    3.     // el id del producto a partir del nombre
    4. }

Share:
  • del.icio.us
  • Google
  • E-mail this story to a friend!
  • Print this article!

Leave a Comment