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

Problema Struts

Estas en el tema de Problema Struts en el foro de Java en Foros del Web. Hola, tengo un problema que no soy capaz de resolver. He buscado información por todos los sitios y he probado mil cosas pero no puedo ...
  #1 (permalink)  
Antiguo 21/05/2009, 02:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Problema Struts

Hola,

tengo un problema que no soy capaz de resolver. He buscado información por todos los sitios y he probado mil cosas pero no puedo con el. La cuestión es:

-para poder dar de alta un bean trabajo con dos jsp`s que funcionan como un formulario tipo wizard
-a partir de un campo de la primera jsp genero la segunda jsp dinamicamente
-el formulario associado a la segunda jsp es del tipo DynaActionForm y es una lista de objetos de uno de los beans de mi programa.

¿Cual es el problema? Que quiero actualizar los datos de este bean, cargo la primera jsp, clico en siguiente, carga la segunda jsp y cuando cambio cualquier datp y quiero grabar vuelve hacia la action con los mismos datos que tenia antes de entrar en la jsp donde se actualizan.

Si alguien puede orientarme le estaria muy agradecido
  #2 (permalink)  
Antiguo 21/05/2009, 04:29
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Wenas

Pon tu codigo. strus-config.xml, tus jsps y el ActionForm.

Saludos.
  #3 (permalink)  
Antiguo 21/05/2009, 10:24
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

el form:

<form-bean name="targetasForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="sensores" type="com.meteorologic.struts.Sensores[]"/>
</form-bean>

el mapping del action

<action
attribute="targetasForm"
input="/jsp/editarSensores.jsp"
name="targetasForm"
path="/editarSensores"
parameter="do"
scope="session"
type="com.meteorologic.struts.action.EditarSensore sAction">
<forward name="actualizarSensor" path="/jsp/editarSensores.jsp" />
<forward name="volver" path="/gestio.do?parameter=actualizar"/>
</action>

la jsp:

<html:form action="/editarSensores">

<logic:iterate name="targetasForm" property="sensores" id="Sensores" indexId="i">
<html:hidden name="Sensores" property="idsensores" indexed="true" />
<tr>
<td>Sensor ${i+1}</</td>
<td><html:text name="Sensores" property="tiposensor" indexed="true" /></td>
<td><html:checkbox name="Sensores" property="activo" indexed="true" /></td><br>

</tr>
</logic:iterate>

<html:hidden property="do" value="actualizarEstacion" />
<html:submit/>
</html:form>

y por último el action:

public class EditarSensoresAction extends org.apache.struts.actions.DispatchAction {

public ActionForward editarSensores(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

DynaActionForm theForm = (DynaActionForm) form;
MeteorologicManager meteorologicManager = new MeteorologicManager();

Sensores[] sensores = meteorologicManager.getSensores((Integer)request.g etAttribute("idestacion"));

theForm.set("sensores", sensores);

int numSensores = sensores.length;

request.setAttribute("numsensors", numSensores);

return mapping.findForward("actualizarSensor");
}

public ActionForward actualizarEstacion(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {


DynaActionForm theForm = (DynaActionForm)form;


MeteorologicManager meteorologicManager = new MeteorologicManager();

Sensores[] sensores = (Sensores[])theForm.get("sensores");
meteorologicManager.actualizarSensores(sensores);

return mapping.findForward("volver");
}



}
  #4 (permalink)  
Antiguo 22/05/2009, 01:59
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Hombre, si el scope es session y siempre estas usando el mismo action, creo que es logico que lo conserve.

Código:
<action
attribute="targetasForm"
....
scope="request"
....
</action>
Saludos
  #5 (permalink)  
Antiguo 22/05/2009, 04:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Es una prueba que ya he hecho y el problema persiste, mantiene los mismos datos, incluso lo he probado forzandolo a nivel de jsp poniendo el scope a request pero no lo soluciono.
  #6 (permalink)  
Antiguo 22/05/2009, 05:39
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Usas hibernate??
  #7 (permalink)  
Antiguo 22/05/2009, 07:02
 
Fecha de Ingreso: julio-2007
Mensajes: 21
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema Struts

En el mapping del action prueba a poner contextRelative="true" como atributo de la etiqueta forward que redirige a la página.
No recuerdo muy bien pero creo que era el valor true, si no me dices y te busco la información de como funciona ese atributo.

saludos
  #8 (permalink)  
Antiguo 22/05/2009, 14:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cita:
Iniciado por elAntonie Ver Mensaje
Usas hibernate??
Si uso hibernate
  #9 (permalink)  
Antiguo 22/05/2009, 14:19
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cita:
Iniciado por quiquedt Ver Mensaje
En el mapping del action prueba a poner contextRelative="true" como atributo de la etiqueta forward que redirige a la página.
No recuerdo muy bien pero creo que era el valor true, si no me dices y te busco la información de como funciona ese atributo.

saludos
Sigue sin funcionar.
Estoy desesperado ya que no acabo de entender el porque no va. He probado mil cosas y tengo el cerebro seco, puffffffff
  #10 (permalink)  
Antiguo 22/05/2009, 15:01
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Respuesta: Problema Struts

Prueba seteando los campos del DynaActionForm a nulos justo antes de mandar el findForward o hacerle un reset.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #11 (permalink)  
Antiguo 25/05/2009, 01:55
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Te comento lo de hibernate porque si usas una ForeignKey para obtener el resultado por segunda vez, hibernate no hace ni p*** caso. No la vuelve a buscar a BBDD,

Si usas la PK para obtener el dato, olvida lo de hibernate.

Saludos.
  #12 (permalink)  
Antiguo 25/05/2009, 02:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cita:
Iniciado por goncafa Ver Mensaje
Prueba seteando los campos del DynaActionForm a nulos justo antes de mandar el findForward o hacerle un reset.

Saludos
No te entiendo, yo cargo de la base de datos el form para poder presentarlo en la jsp, y una vez mostrado el usuario modifica el campo que quiere, por lo tanto al hacer submit deberia volver al action con los datos nuevos y los que no he modificado. En vez de esto vuelve con los datos que llevaba antes de entrar en la jsp. Esa es la parte que no comprendo y no controlo. He cambiado el scope por request pero me hace lo mismo.
  #13 (permalink)  
Antiguo 25/05/2009, 03:03
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cita:
Iniciado por elAntonie Ver Mensaje
Te comento lo de hibernate porque si usas una ForeignKey para obtener el resultado por segunda vez, hibernate no hace ni p*** caso. No la vuelve a buscar a BBDD,

Si usas la PK para obtener el dato, olvida lo de hibernate.

Saludos.
¿Que quieres decir por segunda vez? Yo accedo a la base de datos una sola vez para cargar el DynaActionForm para poder mostrarlo en la página. Esto me lo hace correctamente. El problema es que no vuelve actualizado de la jsp. Entonces si que deberia hacer un segundo acceso para hacer un update, pero no llego a este punto.
  #14 (permalink)  
Antiguo 25/05/2009, 05:26
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Cita:
Iniciado por krakoviano Ver Mensaje
¿Que quieres decir por segunda vez? Yo accedo a la base de datos una sola vez para cargar el DynaActionForm para poder mostrarlo en la página. Esto me lo hace correctamente. El problema es que no vuelve actualizado de la jsp. Entonces si que deberia hacer un segundo acceso para hacer un update, pero no llego a este punto.
Al buscar los datos para presentarlos, accederias a BBDD la primera vez.

En la jsp de actualizacion, actualizas los datos y vuelves a la primera.

Al ir a buscar otra vez los datos a la BBDD, hibernate entenderia que es el mismo 'registro' que tienes en memoria, y no iria a buscarlo a la BBDD.

Asi te presentaria los mismos datos que tuvieras originalmente.

De todos modos, eso tendira sentido si estuvieras buscando el registro de turno por una FK, si no, como te comente antes, olvidalo.

De todos modos, eso seria facil de averiguar si has cambiado el nombre a Pepe por Juan y en la BBDD esta Pepe, seria que no lo estas actualizando, si en la BBDD en cambio esta Juan pero la jsp, te dice que es Pepe...

No se si me explico.

Saludos.
  #15 (permalink)  
Antiguo 25/05/2009, 12:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cita:
Iniciado por elAntonie Ver Mensaje
Al buscar los datos para presentarlos, accederias a BBDD la primera vez.

En la jsp de actualizacion, actualizas los datos y vuelves a la primera.

Al ir a buscar otra vez los datos a la BBDD, hibernate entenderia que es el mismo 'registro' que tienes en memoria, y no iria a buscarlo a la BBDD.

Asi te presentaria los mismos datos que tuvieras originalmente.

De todos modos, eso tendira sentido si estuvieras buscando el registro de turno por una FK, si no, como te comente antes, olvidalo.

De todos modos, eso seria facil de averiguar si has cambiado el nombre a Pepe por Juan y en la BBDD esta Pepe, seria que no lo estas actualizando, si en la BBDD en cambio esta Juan pero la jsp, te dice que es Pepe...

No se si me explico.

Saludos.
Si que te explicas, y muy bien. Gracias por el esfuerzo. Pero no sucede lo que dices, no se actualiza la base de datos
  #16 (permalink)  
Antiguo 26/05/2009, 01:43
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Si no se actualiza la BBDD no es un problema de struts.

Pon el codigo de:

meteorologicManager.actualizarSensores(sensores);

Saludos.
  #17 (permalink)  
Antiguo 26/05/2009, 02:10
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Ahi va el código:

public void actualizarSensores(Sensores[] sensores) {
/* a Hibernate session */
Session session = null;
/* we always need a transaction */
Transaction tx = null;
try {
/* get session of the current thread */
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();

for (int i=0; i<sensores.length;i++){
Sensores sensor = sensores[i];
session.update(sensor);
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
// [laliluna] 17.12.2004 it is recommended to roll back the transaction after an error occured
if (tx != null) try {
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}

} finally {
try {
if (session != null) session.close();
} catch (HibernateException e1) {
e1.printStackTrace();
}
}
}
  #18 (permalink)  
Antiguo 26/05/2009, 04:03
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Supongo que tu clase Sensores sera la tipica de set y get. y que tu fichero hbm.xml esta bien configurado. Empecemos por lo mas sencillo, poner trazas.

Código:
for (int i=0; i<sensores.length;i++){
System.out.println("sensores["+ i + "]=" + sensores[i].toString());
Sensores sensor = sensores[i];
session.update(sensor);
}
System.out.println("va a ahacer el commit");
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
// [laliluna] 17.12.2004 it is recommended to roll back the transaction after an error occured
if (tx != null) try {
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
catch (Exception e)
{
System.out.println("hay otro tipo de excepcion");
e.printStackTrace();
}
Cuenta que pasa.

Saludos.

PD. Vendria tambien bien que tu clase Sensores extendiera el metodo toString.

Código:
public String toString()
{
   return this.getCodigo() + ....;
}
PD2. Tambien vendria bien que sacaras tu trazas sql de hibernate. Para ello cambia tu cfg.xml y pon

Código:
 <property name="show_sql">true</property>

Última edición por elAntonie; 26/05/2009 a las 04:42
  #19 (permalink)  
Antiguo 26/05/2009, 12:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Cuando llego de la jsp y entro en el action:

public ActionForward actualizarEstacion(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {


DynaActionForm theForm = (DynaActionForm)form;

Aqui llego con los mismos datos que antes de entrar en la jsp, por lo tanto no ha valido ninguno de los cambios que haga para poder hacer un update.

MeteorologicManager meteorologicManager = new MeteorologicManager();

Sensores[] sensores = (Sensores[])theForm.get("sensores");
meteorologicManager.actualizarSensores(sensores);

return mapping.findForward("volver");
}
  #20 (permalink)  
Antiguo 26/05/2009, 12:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

Perdon, quiero decir que no vale ningún cambio de los que he hecho en la jsp. Asi que el problema no es de hibernate, supongo. Si en el mapping pongo el scope a request en ese mismo punto que he puesto el comentario no llega nada, y si en cambio pongo el scope a session llega lo mismo que he extraido de la base de datos independientemente de lo que yo haga en la jsp. Da igual que cambie algun dato.
  #21 (permalink)  
Antiguo 28/05/2009, 14:06
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

No hay manera de hacerlo, estoy intentando setear el formulario con javascript cuando hago el submit pero el problema radica en que mi formulario es una colección de objetos.

<form-bean name="targetasForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="sensores" type="com.meteorologic.struts.Sensores[]"/>
</form-bean>

Ahi esta realmente el problema
  #22 (permalink)  
Antiguo 29/05/2009, 01:29
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Mira a ver que parametros hay en sesion. Create una jsp (infoSesion.jsp) por ejemplo y colocalo en tu aplicacion.

Llama a tus jsps, y despues haz una llamada a infoSession.jsp.

Código:
<%@ page contentType="text/html;charset=ISO-8859-1"%>
<%@ page language = "java" session="true"%>
<%@ page import = "java.util.*" %>
<%@ page import = "java.net.*" %>
<html>
  <head>
    <title>Información de la Sesión del Usuario</title>
  </head>

  <body >
    <table>
    <%
    String atributo;
    java.util.Enumeration attrib = request.getSession().getAttributeNames(); 
    while (attrib.hasMoreElements()) {
      atributo = (String) attrib.nextElement();
      out.println("<tr class=\"filaNor\">");
      out.println("<td class=\"celda\" width=\"150px\" nowrap><b>"+atributo+"</b></td>");
      out.println("<td class=\"celda\" >"+request.getSession().getAttribute(atributo)+"</td></tr>");
      int attr = request.getSession().getAttribute(atributo).getClass().getFields().length;
      if ( attr > 1 ) {
        for ( int i=0; i<attr; i++ ) {
          String nombAttrib = request.getSession().getAttribute(atributo).getClass().getFields()[i].getName();
          out.println("<tr class=\"filaNor\">");
          out.println("<td class=\"celda\" >"+nombAttrib+"</td>");
          out.println("<td class=\"celda\" >");
          out.println("</td></tr>");
        }
      }
    }
  %>
    </table>
</BODY>
</HTML>
Cuenta.

Saludos.
  #23 (permalink)  
Antiguo 29/05/2009, 05:38
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

aqui tienes lo que sale:

listaEstacionesForm com.meteorologic.struts.form.ListaEstacionesForm@4 adff7
equipoForm DynaActionForm[dynaClass=equipoForm,nombre=Alfa,nsensores=4,latit ud=41.225,propietario=Krakoviano Org,longitud=1.718,idestacion=1,tiposensor={},acti vo=true]
calendarForm DynaActionForm[dynaClass=calendarForm,fechain=,fechafin=,idsensor =,idestacion=,tiposensor=]
targetasForm DynaActionForm[dynaClass=targetasForm,sensores={com.meteorologic. struts.Sensores@fac7c5,com.meteorologic.struts.Sen sores@2cc04e,com.meteorologic.struts.Sensores@1acd 952,com.meteorologic.struts.Sensores@1fd4a63}] org.apache.struts.action.LOCALE es

Lo que te decia, sale una lista de los sensores , de objetos. Pero claro supongo que al ser el scope session me mantiene los datos, pero si lo pongo a request cuando vuelvo para el action para hacer el update, vuelve sin nada.

En cambio hago el update pero de un form de campos normales, es decir que no son objetos y aunque es session me lo cambia por lo que yo pongo en pantalla.
Estoy perdido
  #24 (permalink)  
Antiguo 01/06/2009, 02:06
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Cita:
Iniciado por krakoviano Ver Mensaje
aqui tienes lo que sale:

listaEstacionesForm com.meteorologic.struts.form.ListaEstacionesForm@4 adff7
equipoForm DynaActionForm[dynaClass=equipoForm,nombre=Alfa,nsensores=4,latit ud=41.225,propietario=Krakoviano Org,longitud=1.718,idestacion=1,tiposensor={},acti vo=true]
calendarForm DynaActionForm[dynaClass=calendarForm,fechain=,fechafin=,idsensor =,idestacion=,tiposensor=]
targetasForm DynaActionForm[dynaClass=targetasForm,sensores={com.meteorologic. struts.Sensores@fac7c5,com.meteorologic.struts.Sen sores@2cc04e,com.meteorologic.struts.Sensores@1acd 952,com.meteorologic.struts.Sensores@1fd4a63}] org.apache.struts.action.LOCALE es

Lo que te decia, sale una lista de los sensores , de objetos. Pero claro supongo que al ser el scope session me mantiene los datos, pero si lo pongo a request cuando vuelvo para el action para hacer el update, vuelve sin nada.

En cambio hago el update pero de un form de campos normales, es decir que no son objetos y aunque es session me lo cambia por lo que yo pongo en pantalla.
Estoy perdido
Has puesto el metodo toString() en la clase Sensores??
  #25 (permalink)  
Antiguo 01/06/2009, 04:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

No lo he puesto, para que lo necesito?
  #26 (permalink)  
Antiguo 01/06/2009, 04:51
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts

Para que en vez de com.meteorologic. struts.Sensores@fac7c5 te salgan sus propiedades
  #27 (permalink)  
Antiguo 02/06/2009, 02:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 20
Antigüedad: 15 años
Puntos: 0
Respuesta: Problema Struts

POR FIN HE RESUELTO EL PROBLEMA.

¿Como?

He cambiado :

<logic:iterate name="targetasForm" property="sensores" id="Sensores" indexId="i">
<html:hidden name="Sensores" property="idsensores" indexed="true" />
<tr>
<td>Sensor ${i+1}</</td>
<td><html:text name="Sensores" property="tiposensor" indexed="true" /></td>
<td><html:checkbox name="Sensores" property="activo" indexed="true" /></td><br>

</tr>
</logic:iterate>


por

<table>
<c:forEach var="sensores" items="${targetasForm.map.sensores}" >
<tr>
<td><html:text indexed="true" name="sensores" property="tiposensor"/></td>
<td><html:checkbox indexed="true" name="sensores" property="activo"/></td>
</tr>
</c:forEach>
</table>


y milagrosamente FUNCIONA. Me actualiza sin ningún problema.

MUCHAS GRACIAS A TODOS, SOBRE TODO A ANTOINE , POR LA AYUDA QUE ME HABEIS DADO
  #28 (permalink)  
Antiguo 02/06/2009, 02:49
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema Struts



Pero no es lo mismo?? Debe ser que no.

Me alegro que lo hayas resuelto.

Saludos.
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 19:51.