Foros del Web » Programación para mayores de 30 ;) » Java »

Struts2: no recoge los datos de un formulario

Estas en el tema de Struts2: no recoge los datos de un formulario en el foro de Java en Foros del Web. Hola! Supongo que mi problema será algún detalle que se me esta escapando.. Tengo una aplicación web con struts2 y tiles. Mi problema es que ...
  #1 (permalink)  
Antiguo 20/07/2011, 13:52
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Struts2: no recoge los datos de un formulario

Hola!
Supongo que mi problema será algún detalle que se me esta escapando.. Tengo una aplicación web con struts2 y tiles. Mi problema es que tengo un formulario en un jsp y al ir a la action, todos los campos aparecen como null...

Mi código es el siguiente:
**modifyData.jsp
Código PHP:
<div id="alarmas">
    <
s:form action="modifyUser" method="post">
        <
table>
             <
tr>
             <
td ><p>
                 <
s:textfield key="label.fullName" name="fullName" /><br></p></td>
             </
tr>    
             <
tr>
                 <
td ><p>
                 <
s:textfield key="label.phoneNumber" name="phoneNumber"/></p></td>
            </
tr>
            <
tr>
                 <
td><p>
                 <
s:textfield key ="label.email" name="email" /><br></p></td>
            </
tr>
            <
tr>
                 <
td align="center"><div class="wrapper">
                     <
s:submit cssClass="button" method="execute" key="label.modify" align ="center" /></div></td></tr>    
        </
table>
        </
s:form>        
    </
div
**modifyDataAction.java
Código PHP:
public class ModifyUserAction extends ActionSupport{
    
    private 
String fullName;
    private 
String phoneNumber;
    private 
String email;
    
    
    public 
String execute() throws Exception{
              
// Aquí va código
                  
return "success";                    
    }

    public 
void setFullName(String fullName) {
        
this.fullName fullName;
    }
    public 
String getFullName() {
        return 
fullName;
    }
    public 
void setPhoneNumber(String phoneNumber) {
        
this.phoneNumber phoneNumber;
    }
    public 
String getPhoneNumber() {
        return 
phoneNumber;
    }
    public 
void setEmail(String email) {
        
this.email email;
    }
    public 
String getEmail() {
        return 
email;
    }


** struts.xml
<action name="modifyUser" class="actions.ModifyUserAction">
<interceptor-ref name="logger"/>
<result name="success" type="tiles">/managerData.tiles</result>
<result name="error" type="tiles">/managerData.tiles</result>
</action>


Lo he debugueado y los 3 campos del formulario son null...¿Alguna idea?
Muchas gracias!
  #2 (permalink)  
Antiguo 20/07/2011, 15:48
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Struts2: no recoge los datos de un formulario

No estas recibiendo los parametros correctamente.

Yo aun no conozco nada de xml, por ello esta parte no la entiendo.

Pero en el action del formulario estas enviando al servlet modifyUser por lo tanto es ahi donde recibes el valor de los parametros.

ej.
String fullName = request.getParameter("fullName");

por ejemplo.

Pero reitero, si esto no es tu problema y ya lo sabías una disculpa como te digo no entiendo la parte del XML pero se que juega un papel muy importante en la seguridad de una aplicacion web, al punto que se puede dar un nombre de un servlet y apuntar a otro, si es tu caso entonces esto explica el porque usas action="modifyUser"

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por iovan; 20/07/2011 a las 20:41
  #3 (permalink)  
Antiguo 21/07/2011, 10:30
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Struts2: no recoge los datos de un formulario

Pero tengo entendido que en struts2 no hay que hacer eso, si no que los parametros del formulario se pasan directamente.... Por lo menos en la pagina del login si que funciona asi, no se si tiene algo que ver con las tiles o con que.... :(
  #4 (permalink)  
Antiguo 21/07/2011, 12:53
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Struts2: no recoge los datos de un formulario

Es cierto que en Struts2 se hace así.

Prueba a eliminar el method del submit, el execute se llama siempre automáticamente al llamar a un action, y eso ya lo haces en el action del form.

Yo no sé nada de tiles, pero no veo ninguna etiqueta de tiles, solo las de Struts2.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 21/07/2011, 15:15
 
Fecha de Ingreso: mayo-2011
Ubicación: Santiago
Mensajes: 20
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Struts2: no recoge los datos de un formulario

en el action coloca el metodo execute y borra el atributo method del submit
  #6 (permalink)  
Antiguo 21/07/2011, 19:42
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Struts2: no recoge los datos de un formulario

Puedes poner tu struts.xml completo porfavor, aydaria a ver que mas tienes declarado, otra cosa que hace el logger interceptor? Tienes bien declarado el tiles result type en tu paquete? Puedes probar quitando el result type tiles y poner un result normal de jsp, intenta mandar a diferentes jsps en los results success y error. A simple vista no se ve nada mal.
  #7 (permalink)  
Antiguo 22/07/2011, 06:14
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Struts2: no recoge los datos de un formulario

Hola!

@Xerelo: Eliminar el method no cambia nada... Entra al execute pero con los parametros del form a null. Lo que hay copiado solo es el body de las tiles.

@DonVidela: lo mismo, no funciona...

@hualro: Mi struts.xml es:

Código PHP:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <constant name="struts.devMode" value="false" />

    <constant name="struts.custom.i18n.resources"
        value="ApplicationResources" />

    <package name="default" extends="struts-default" namespace="/">
    <result-types>          
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
    
    <interceptors>
       <interceptor name="logger" class="actions.AuthenticationInterceptor"/>
      </interceptors>
    
        <action name="login"
            class="actions.LoginAction" method="execute">
            <result name="success" type="tiles">/welcome.tiles</result>
            <result name="admin" type="tiles">/admin.tiles</result>
            <result name="input">Login.jsp</result>
            <result name="error">Login.jsp</result>
        </action>
        
        <action name = "logout"    class="actions.LogoutAction">
             <result name="success" type="redirect">Login.jsp</result>    
         </action>
        
        <action name="modifyUser" class="actions.ModifyUserAction">
            <interceptor-ref name="logger"/>
            <result name ="nologin" type="redirect">Login.jsp</result>
            <result name="success" type="tiles">/confiAlarms.tiles</result>
        </action>
            
    </package>
</struts>
He borrado algunas actions que no viene al caso.
M interceptor logger lo que haces es comprobar si hay una session abierta:

Código PHP:
public class AuthenticationInterceptor extends ActionSupport implements Interceptor {    
    @
Override
    
public String intercept(ActionInvocation arg0throws Exception {
        
// TODO Auto-generated method stub
        
Map session arg0.getInvocationContext().getSession();
        if (
session.get("username") == null) {
            
addActionError(getText("error.nologin"));
              return 
"nologin";
        } else {
          return 
arg0.invoke();
        }
    }


El tiles result funciona en todos los actions bien. El problema es sque mis campos del formulario, llegan como null a ModifyUserAction. java.

Muchisimas gracias!. Un saludo
  #8 (permalink)  
Antiguo 22/07/2011, 09:01
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Struts2: no recoge los datos de un formulario

Es muy raro, prueba a ver si haciendo una JSP normal sin tiles, el action funciona correctamente.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 22/07/2011, 18:04
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Struts2: no recoge los datos de un formulario

En que momento estas poniendo los break points? puedes debuggear el Interceptor para ver que esten los datos, otra cosa es que puedes quitar de momento el interceptor y quitar los tiles, intenta plain results a jsp, solo para eliminar variantes.
  #10 (permalink)  
Antiguo 23/07/2011, 05:48
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Struts2: no recoge los datos de un formulario

No funciona tampoco sin tiles... Los parámetros salen a null. Al único action al que llegan es al de login.

Lo mismo quitando el interceptor o mirando si ahí llevan... No llegan y no sé donde está el error... :(
  #11 (permalink)  
Antiguo 23/07/2011, 06:19
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Struts2: no recoge los datos de un formulario

Lo he conseguido!!

He añadido al ModifyUserAction "implements ModelDriven" y ahora se pasan los parámetros correctamente!

Muchas gracias por vuestro tiempo!
  #12 (permalink)  
Antiguo 23/07/2011, 09:06
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Struts2: no recoge los datos de un formulario

No lo entiendo, entonces el problema estaba en la forma en la que recuperabas los datos, en la parte de código que no has puesto.

ModelDriven lo único que hace es coger esos parámetros y meterlos directamente en un objeto.

Vale, ahora lo veo. Te has cargado todos los interceptores en el action, incluyendo el interceptor params, por lo tanto es imposible que recuperara nada.

Si existe un baseStack y un defaultStack de interceptores es por algo, es porque son los que habitualmente se necesitan. Añadiendo el modelDriven se ve que puedes puentear al params.

Échale un vistazo a los los dos stacks de interceptores que he nombrado, tal y como has declarado el action, el único interceptor que tienes es el de login que has hecho, dejando fuera a los básicos, que seguramente necesitarás utilizar más adelante.

Puedes hacer combinados, añadiéndole a alguno de los stacks, los interceptores que quieras.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: struts, tildes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:29.