Tuve muchos problemas con este Taglib, I18nTag:
1
2
3
| <s:i18n name="otherApplication">
<s:text name="user.name" />
</s:i18n> |
como ustedes saben, sirve para leer un archivo properties independientemente del definido en el archivo struts.xml que es loading como default en el proyecto:
1
| <constant name="struts.custom.i18n.resources" value="Application"/> |
Este taglib busca el archivo otherApplication.properties y lo deja en el stack del proyecto, con lo cual todas las propiedades que se soliciten dentro de este taglib son buscadas primero en este archivo, Yo quería ponerle una variable en la propiedad name=”{%}”, name=”#session”, etc. para que el contenido sea dinámico… y que loading el archivo que yo quisiera sin que sea fijo el nombre… pero este taglib no deja que su propiedad name sea dinámico, sino que debe de ser estático ósea que obtiene el nombre tal y como lo hayamos escrito dentro de esta propiedad… en fin… si alguien esta interesado en cambiar el contenido y asociarle otro valor o modificarlo, lo que yo hice fue, modificar la clase I18nTag.class del .jar de struts2… y como hice esto:
1.- Abrimos el archivo struts.jar con Winrar(en mi caso es el que tengo)
2.- Abrimos la carpeta META-IF
3.- Extraemos un archivo que se llama struts-tags.tld
4.- Lo abrimos con un editor de texto
5.- Buscamos el taglibs, en este caso Es I18n
6.- Sustituimos al parte de ruta ():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <tag>
<name>i18n</name>
<tag-class>org.apache.struts2.views.jsp.I18nTag</tag-class>
<body-content>JSP</body-content>
<description><![CDATA[Get a resource bundle and place it on the value stack]]></description>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<description><![CDATA[id for referencing element. For UI and form tags it will be used as HTML id attribute]]></description>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<description><![CDATA[Name of ressource bundle to use (eg foo/bar/customBundle)]]></description>
</attribute>
</tag> |
Y en la línea escribimos un paquete dentro de nuestro proyecto…
1
| <tag-class>net.new.views.jsp.I18nTag</tag-class> |
7.- Lo guardamos y lo volvemos a empaquetar dentro del struts.jar
8.- Bajamos los archivos fuentes de la versión que estemos usando, y los colocamos en la ruta de paquetes que hayamos definido en el paso 6 ósea en ()
9.- Una vez hecho esto, cada vez que utilicemos dentro de una JSP esta etiqueta (i18n) de Struct 2 buscará la clase donde le hayamos puesto la ruta de paquetes…
10.- Y con esto podremos modificar la clase y el valor de sus propiedades…
Listo!!!!