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:
- 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:
- 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).
- 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:
- En web.xml deberemos inclur:
- En las JSPs donde utilicemos la internacionalizaci�n deberemos incluir al comienzo:
- 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
... application.title= Demo de Struts en APLICACION index.header=Bienvenido a la Demo de Struts en APLICACION ...
<servlet>
<servlet-name>action</servlet-name>
...
<init-param>
<param-name>application</param-name>
<param-value>com.empresa.aplicacion.MiAplicacion</param-value>
</init-param>
...
<web-app>
...
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
...
</web-app>
... <%@ 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
... <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:
- Crear el ActionForm (ver la secci�n Model / ActionForm Beans)
- Crear la p�gina JSP del formulario utilizando los Tags que provee Struts (ver la secci�n View / Tags). Ejemplo:
- 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:
...
<%@ 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>
<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:
- html: http://jakarta.apache.org/struts/struts-html.html
- bean: http://jakarta.apache.org/struts/struts-bean.html
- logic: http://jakarta.apache.org/struts/struts-logic.html
- nested: http://jakarta.apache.org/struts/struts-nested.html
Las clases TagHandlers que implementan dicha funcionalidad est�n documentadas en:
- html: http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/package-summary.html
- bean: http://jakarta.apache.org/struts/api/org/apache/struts/taglib/bean/package-summary.html
- logic: http://jakarta.apache.org/struts/api/org/apache/struts/taglib/logic/package-summary.html
- nested: http://jakarta.apache.org/struts/api/org/apache/struts/taglib/nested/package-summary.html