leer una Key de un archivo .properties desde un Action…

Java, Struts2 27 de May del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 3.67 out of 5)
Loading ... Loading ...

Pues es algo super básico pero nunca esta de más… aunque hay muchas formas de hacerlos… aquí les poco un opción…
File Application.properties

1
2
login.username=Nombre
login.password=Contraseña

y desde el Action

1
2
 MessageResources messageResources = getResources(request);
 String username = messageResources.getMessage("login.username");

y listo…

Utilizar archivos JSPF dentro de un proyecto en struts…

Java, Programación, Struts2 13 de May del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 3.00 out of 5)
Loading ... Loading ...

No había trabajado don este tipo de archivos, pero realmente tiene la misma estructura que un archivo Jsp… pero no diferencia ya que los archivos JSPF utilizan los mismos Tags y además de que son muy utilizado para para organizar mejor las partes en que esta separado nuestro sistema , por ejemplo: header, body y footer.
aquí un ejemplo:

<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<div id="footer">
</div>

Problemas con búsquedas dinámicas en struts2… utilizando “chain” y enviando los resultados al mismo Action donde se encuentra el formulario (filtro de búsqueda en la Jsp)…

Java, Programación, Struts2 27 de April del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 3.00 out of 5)
Loading ... Loading ...

Así es, teníamos un Action para mostrar el formulario de búsqueda y al dar Submit.. se enviaba a otro Action en donde obtenía los datos y se formaba el list y este mostraba los datos en la misma Jsp… en conclución… No podíamos meter el resultado en el tiles (para agregar el header y footer) ya que cuando lo hacíamos se perdían los datos… y la Jsp se mostraba sin header y footer… antes estaba así:

1
2
3
4
5
6
7
8
9
<action name="searchBooks" class="com.mycompany.SearchBooksAction" method="search">
         <result type="chain">listaBooks.action</result>
         <result name="chain">/error.jsp</result>
</action>
 
<action name="listaBooks" class="com.mycompany.SearchBooksAction"  method="list"> 
 
        <result >searchbook.jsp</result>
</action>

Donde searchbook.jsp lo utilizábamos para mostrar el formulario… en fin… un compañero lo resolvió de la siguiente forma:

En el web.xml hay que agregar:

1
2
3
4
<filter>
      <filter-name>struts-cleanup</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>

Y listo!!! con esto ya se puede direccionar la Jsp al tiles sin que si pierda el resultado y se pueda manterner en session.

1
2
3
4
5
6
7
8
9
<action name="searchBooks" class="com.mycompany.SearchBooksAction" method="search">
         <result type="chain">listaBooks.action</result>
         <result name="chain">/error.jsp</result>
</action>
 
<action name="listaBooks" class="com.mycompany.SearchBooksAction"  method="list"> 
 
        <result type="tiles">searchbook.jsp</result>
</action>

sobre escribir el mensaje de error que muestra por default struts2… Invalid field value for field “{0}” en struts2

Java, Programación, Struts2 25 de March del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 3.67 out of 5)
Loading ... Loading ...

Para poder sobre escribir el mensaje de error que se muestra por default por xwork.default.invalid.fieldvalue (Invalid field value for field “nombre_campo”) por no hacer el manejo de la validación del campo o por otras desconocidas jajajaja causas, se puede realizar de dos formas:

1.- Utilizar el validador que viene por default en Struts2 nombre-validation.xml (si ya fallo este intento… pasar al paso 3)
2.- Realizar la validación mediante Java. (Sí también ha fallado este intento)
3.- Declarar esta propiedad en los archivos properties que se estén utilizando (invalid.fieldvalue.NOMBRE_CAMPO)

Un ejemplo:
En la jsp:

1
2
3
4
5
6
7
8
  <s:date
     name="date"
     format="dd/mm/aaaa"
     id="date.formatted" />
  <s:textfield name="date" 
     label="Date"
     required="true"
     value="%{date.formatted}" />

Si el campo no es correcto podría mostrar el siguiente mensaje de error:

1
  Invalid field value for field "date".

Así que podemos cambiar el mensaje declarando esa propiedad en los archivos.properties:

1
invalid.fieldvalue.NOMBRE_CAMPO=Fecha invalida

con lo cual, para el ejemplo anterior quedaría así:

1
invalid.fieldvalue.date=Fecha inválida

y listo… el texto es cambiado!!!!!

Una forma de direccionar parámetros por medio de la URL en Struts 2… <rediect-action><param>…

Google, Programación, Struts2 18 de March del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5.00 out of 5)
Loading ... Loading ...

Cuando tienes un formulario de búsqueda o una actualización y necesitas hacer los ver los cambios… y además que la JSP muestre los resultados ya actualizados… pues hay dos problemas… que para mostrar la consulta de resultados pues seguramente esta en un Action y otra que la modificación este en otro… pero aunque este en el mismo no podrías recibir los mismo parámetros del formulario…

Entonces se podría hacer esto:

Supongamos que este Action es el que muestra los alumnos de un filtro de una búsqueda:

JSP de búsqueda:

1
2
3
4
5
6
7
8
9
10
11
12
13
<s:form action="buscaAlumnos" method="post">
            <s:textfield name="name" 
                cssClass="textInput" 
                maxlength="50" size="20"
                label="Name"
                required="false" />
 
            <s:textfield name="lastname" 
                cssClass="textInput" 
                maxlength="150" size="30"
                label="Lastname"
                required="false" />
</s:form>

Action que procesa la búsqueda y que se le envían los parámetros anteriores:

1
2
3
4
<action name="buscaAlumnos" class="com.buscar" method="buscar">
     <result type="chain">listaAlumnos</result>
     <result name="error"> errorBuscar</result>
</action>

En el JSP que muestra los resultados, colocamos un link para poder borrar a un usuario:

1
2
3
4
5
<s:url id="Url" action="Nombre_del_mapeo" escapeAmp="false">
  	 <s:param name="name" value="name" />
       <s:param name="lastname" value="lastname" />
</s:url>
<a href="<s:property value="%{Url}"/>"><s:text name="Borrar alumno"/></a>

Y este otro Action tiene que borrar al alumno y regresar con los datos de posibles filtros de la búsqueda realizada, ósea con el NAME Y LASTNAME del JSP donde esta el formulario:

1
2
3
4
5
6
7
8
9
  <action name=" Nombre_del_mapeo" class="com.delete"  method="input">
     <result name="success" type="redirect-action">
	   <param name="actionName">./buscaAlumnos.action</param>
	   <param name="parse">true</param>
           <param name="name">${name}</param>
           <param name="lastname">${lastname}</param>
     </result>
<result name="error" type="tiles">errorDelete</result>
</action>

Tenemos que tener su get y set de los atributos:

Action Delete.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private String name;
private String lastname;
 
public String getName()
    {
        return name;
    }
 
    /**
     * @param name the name to set
     */
    public void setName(String name)
    {
        this.name = name;
    }
 
    /**
     * @return the lastname
     */
    public String getLastname()
    {
        return lastname;
    }
 
    /**
     * @param lastname the lastname to set
     */
    public void setLastname(String lastname)
    {
        this.lastname = lastname;
    }

Y después de realizar el proceso de borrado. Este reenviará al Action buscaAlumnos los parámetros por medio de la URL y así poder repetir la búsqueda y…

1
http://...../buscaAlumnos.action?name=Valor&lasname=Valor

entonces el JSP que muestra la búsqueda volverá actualizarse sin mostrar al Alumno borrado. Y listo!!!!

Validación del Tag … en Struts 2 (validation for tag…Struts 2)

Java, Programación, Struts2 10 de March del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Una forma de validación de un <s:select> en struts 2 , de las muchas que pueden existir, es la de usar el validador claro esta que viene integrado con el mismo frameworks… aquí les pongo un ejemplo:

JSP

1
2
3
4
5
6
7
<s:select label="Month:"
     name="monthn"
     headerKey=""
     headerValue="--  Select a Month --"
     list="#{'01':'January','02':'February','03':'March','04':'April',
     '05':'May','06':'June','07':'July','08':'August','09':'September','10':
     'October','11':'November','12':'December'}" />

en html así

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<select name="monthn" >
    <option value="" >--  Select a Month --</option>
    <option value="01">January</option>
    <option value="02">February</option>
    <option value="03">March</option>
    <option value="04">April</option>
    <option value="05">May</option>
    <option value="06">June</option>
    <option value="07">July</option>
    <option value="08">August</option>
    <option value="09">September</option>
    <option value="10">October</option>
    <option value="11">November</option>
    <option value="12">December</option>
</select>

y en el validador (en el xml)

1
2
3
4
5
6
<field name="monthn">
        <field-validator type="fieldexpression">
            <param name="expression"><![CDATA[!("".equals(monthn))]]></param>
             <message key="errors.required.monthn"></message>
        </field-validator>
    </field>

Donde equals es el método a usar para compararlo con el nombre del select. Y listo¡¡¡ Esta es una de las formas… pero se puede hacer de muchas maneras…

Problemas con la Internacionalización con Struts 2 y I18n… modificando la clase del Taglib I18nTag…

Java, Programación, Struts2 5 de March del 2009

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

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!!!!

http://www.wikio.es BlogESfera - Directorio de Blogs Hispanos blogarama - the blog directory Mi Ping en TotalPing.com
Internet blogs Programming Blogs - Blog Catalog Blog Directory Internet blogs Buzzear (ES) Publicidad por tu blog con Boosterblog directorio de blogs
Agregar Web - Directorio de webs Directorio webs Directorio Web
Anuncios Gratis Blog Directory Technology Blogs - Blog Rankings