Manual Básico de Struts

La View comprende las JSP (principalmente) y los servlets involucrados en la generaci�n de la interfaz de usuario o con otros Sistemas. Struts provee soporte para construir aplicaciones multi-idioma, interacci�n con formularios y otras utilidades mediante la utilizaci�n de Tags especiales (TagLibraries).

.�Internacionalizaci�n

Lo podemos abreviar en la siguiente receta:

  1. Crear un archivo de texto (ej: MiAplicacion.properties) en el directorio donde se encuentren las clases de la aplicaci�n (ej: d:\com\empresa\aplicacion) donde se contengan las claves y valores con el formato clave.subclave=texto de los textos que pertenezcan al idioma principal. Ejemplo:
  2. ...
    application.title= Demo de Struts en APLICACION
    index.header=Bienvenido a la Demo de Struts en APLICACION
    ...
    
  3. Para cada idioma alternativo se crear� un archivo nuevo que se llame igual pero que termine en "_xx.properties" siendo xx el c�digo ISO de idioma (ej: MiAplicaci�n_en.properties).
  4. En struts-config.xml se debe configurar el Tag /servlet/init-param/param-name application y ponerle como param-value la localizaci�n del archivo con el idioma principal. Ejemplo:
  5. <servlet>
        <servlet-name>action</servlet-name>
        ...
        <init-param>
          <param-name>application</param-name>
          <param-value>com.empresa.aplicacion.MiAplicacion</param-value>
        </init-param>
        ...
    
  6. En web.xml deberemos inclur:
  7. <web-app>
      ...
      <taglib>
        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
      </taglib>
      ...
    </web-app>
    
  8. En las JSPs donde utilicemos la internacionalizaci�n deberemos incluir al comienzo:
  9. ...
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    ...
    

    para declarar que utilizaremos la TagLibrary struts-bean con el prefijo bean y definida en /WEB-INF/struts-bean.tld

  10. Y finalmente, utilizaremos el Tag <bean:message key="clave.subclave"/> donde clave y subclave corresponden al texto por el que se reemplazar� seg�n el idioma del usuario. Ejemplo
  11. ...
    <TITLE><bean:message key="application.title"/></TITLE>
    ...
    

Por defecto Struts asigna a cada usuario el idioma principal de la aplicaci�n. Si se utiliza el tag <html:html locale="true"> (reemplaza a "<html>" y debe cerrarse con "</html:html>") entonces se utilizar� el primero de los idiomas soportados por la aplicaci�n que se encuentre en el header "Accept-Language" enviado por su navegador. Pero si se desea proponerle al usuario una lista de idiomas entonces �ste podr� cambiarse mediante session.setAttribute( Action.LOCALE_KEY, new java.util.Locale(country, language)) donde country y language ser�n el string del pa�s e idioma a establecer.

Adem�s de texto podran incluirse variables (al igual que se hace en los println) y hasta formato de datos. Para m�s informaci�n ver la documentaci�n oficial de Sun disponible en http://java.sun.com/j2se/1.3/docs/guide/intl/

.�Forms

Una de las tareas que durante el desarrollo de una aplicaci�n insume mucho trabajo (aunque en realidad no lo merezcan) es la interacci�n con formularios, ya sea para editar u obtener nueva informaci�n. Las comprobaciones, la gesti�n de errores, el volver a presentarle el mismo form al usuario con los valores que puso y los mensajes de error y un largo etc�tera est�n soportadas por Struts a fines de hacernos la vida un poco m�s f�cil.

La idea es la siguiente: todo el trabajo de comprobaciones y generaci�n de mensajes de error se implementa en los ActionForm y todo el trabajo de generaci�n de interfaz en la/s JSP.

Veamos la receta:

  1. Crear el ActionForm (ver la secci�n Model / ActionForm Beans)
  2. Crear la p�gina JSP del formulario utilizando los Tags que provee Struts (ver la secci�n View / Tags). Ejemplo:
  3. ...
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    ...
    <html:html>
    ...
       <html:form action="/logon" focus="username">
    ...
         <h1><bean:message key="logon.header"/></h1>
         <html:form action="/logon" focus="username">
         <h5><html:errors/></h5>
         <h3><bean:message key="logon.mainText"/></h3>
         <p><bean:message key="logon.username"/>
               <html:text property="username" size="16" maxlength="16"/></p>
         <p><bean:message key="logon.password"/>
               <html:password property="password" size="16" maxlength="16" redisplay=false/></p>
         <p><html:submit property="submit" value="Submit"/></p>
         <p><html:reset/></p>
    ...
       </html:form>
    ...   
    </html:html>
    
  4. Declarar el ActionForm en struts-config.xml agregando en /struts-config/form-beans el tag <form-bean name="nombreForm" type="paquete.clase"/> y en la declaraci�n del Action (ver la secci�n Controller / Action Beans) agregar los atributos name="nombreForm", scope="(request � session)", e input="paginaForm.jsp". Ejemplo:
  5. <struts-config>
      ...
      <form-beans>
      ...
       <form-bean  name="logonForm" type="com.empresa.aplicacion.LogonForm"/>
      ...
      </form-beans>
      ...
      <action-mappings>
      ...
       <action path="/logon" type="com.empresa.aplicacion.LogonAction" name="logonForm" 
                   scope="request" input="/logon.jsp">
        ...
       </action>
       ...
      <action-mappings>
      ...
    </struts-config>
    

.�Tags

B�sicamente, un Tag de JSP consiste en un Tag con formato <prefijoTagLib:nombreTag atributo=valor ... > que cuando la JSP se compila es sustitu�do por una llamada a la clase TagHandler que se encarga de resolver su funcionalidad.

El TagHandler extiende BodyTagSupport o TagSupport (seg�n si es un tag que tiene body), que implementa su funcionalidad en los m�todos doStartTag(), doEndTag(),doInitBody(), doAfterBody() (los dos �ltimos s�lo en las que extienden BodyTagSupport), adem�s de los getters y setters correspondientes a sus atributos. Esta clase se define en un Tag Library Definition (archivo xml con extensi�n TLD donde se define el nombre del tag, la clase TagHandler que lo atiende, la definici�n de sus atributos, si tiene body, etc.) que a su vez se debe declarar en el web.xml (dentro de <web-app> se pone <taglib> <taglib-uri> nombreTagLib </taglib-uri> <taglib-location>/directorios/nombreArchivo.tld </taglib-location> </taglib>) y en la JSP donde se utilizar� (<%@ taglib uri="nobreTagLib" prefix="prefijoTagLib" %>). Finalmente, el Tag que se usa en la JSP consiste en <prefijoTagLib:nombreTag atributo=valor ... >. Para m�s info, ver la p�gina oficial de Sun sobre TagLibraries en http://java.sun.com/products/jsp/taglibraries.html.

La funcionalidad de los Tags inclu�dos en Struts se encuentran documentados en:

Las clases TagHandlers que implementan dicha funcionalidad est�n documentadas en:

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP