domingo, 27 de diciembre de 2009

Estructuras de control en Struts 2: un ejemplo sencillo

Una forma sencilla de ver el funcionamiento de una estructura de control con Struts 2 es el caso del Gestor de usuarios para aquellos que tienen permisos de administrador o no.

En la mini aplicación que estoy desarrollando he dividido a los usuarios o jugadores en dos tipos, Administrador e Invitado a través de un atributo en la base de datos del tipo "admin" o "invitado".

La diferencia entre ser administrador o invitado es que el primero puede acceder al gestor de jugadores, y con ello añadir, editar o eliminar usuarios; mientras que un usuario con permiso de Invitado no podrá.

El gestor se muestra a través de un simple botón.

Dos posibles soluciones

Encontre dos formas de implementarlo.
La primera consistía en, a través de una clase action identificar el permiso del usuario actual y dependiendo de este atributo mostrar un PANELCONTROL1.jsp o un PANELCONTROL2.jsp, correspondiendo estos a cada uno de los dos tipos de perfil. El primero no mostraría el boton "Gestor de usuarios" y el segundo sí lo mostraría.

En mi opinión esta solución, a pesar de funcionar, parecía poco limpia ya que estabamos creando dos paginas jsp identicas salvo una opción. Sería código redundante.

Por lo tanto eche mano de las estructuras de control que tiene Struts 2, y las utilice en la unica panelContro.jsp de la siguiente forma:


<table>

<thead><h3>Panel de control</h3></thead>

<tr>

<td>

<s:form action="ConsultaMiis">

<s:submit value="Gestor de Miis"/>

</s:form>

</td>

</tr>

<s:if test="%{perfil.permiso=='admin'}">

<tr>

<td>

<s:form action="ConsultaJugadores">

<s:submit value="Gestor de perfiles de jugador"/>

</s:form>

</td>

</tr>

</s:if>

</table>


De esta forma solo se mostrará el boton cuando el permiso del usuario sea de administrador.

Notas finales

El guión de la entrega final indica que no deberemos introducio codigo en las jsp, y aunque esta ultima solucion así lo parezca, una estructura de control de Struts no deberia considerarse codigo del todo.
De todas formas, espero encontrar una mejor forma de implementar esta opcion ya que parece poco robusta.

No hay comentarios:

Publicar un comentario