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

[SOLUCIONADO] problema struts me modifica los datos

Estas en el tema de problema struts me modifica los datos en el foro de Java en Foros del Web. Hola, estoy con un proyecto que usa Spring,Hibernate,JSF primefaces y Struts2. Tengo un formulario con 4 campos: - Tipo: radio con 4 valores posibles - ...
  #1 (permalink)  
Antiguo 09/03/2015, 02:59
 
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
problema struts me modifica los datos

Hola, estoy con un proyecto que usa Spring,Hibernate,JSF primefaces y Struts2.

Tengo un formulario con 4 campos:
- Tipo: radio con 4 valores posibles
- Descripcion: un textfield
- Fecha: un datepicker para escoger la fecha
- hora: son dos select para seleccionar hora y minuto.

En el action de esa vista, tengo los metodos add,edit,save,validate.
El problema es el siguiente:
Yo introduzco valores y por ejemplo, si en validate esta puesto que tengo que rellenar todos los campos y yo no los relleno todos(en conclusion, la funcion validate devuelve false), me vuelve al formulario para poder cambiar los datos.
Si introduzco todo bien, se guarda pero si por ejemplo el campo descripcion tiene el valor "Hola esta es mi descripcion", pasa a tener el siguiente valor :
"Hola esta es mi descripcion,Hola+esta+es+mi+descripcion"
Si por ejemplo esta segunda vez, en vez de poner bien todos los campos, no los relleno todos (por tanto validate devolvera flase), el campo descripcion muestra este valor:
Hola esta es mi descripcion, Hola+esta+es+mi+descripcion, Hola+esta+es+mi+descripcion, Hola%2Besta%2Bes%2Bmi%2Bdescripcion


Lo raro es que si la primera vez lo haces mal, cuando te devuelve al formulario, la descripcion sale bien (SOLO LA PRIMERA VEZ), pero al guardarlo se guarda concatenado.
Y cada vez que le das a guardar se "duplica" el String, por asi decirlo. No muestra la descripcion que se va a guardar, a pesar de que la concatena.
Da la sensacion que muestra lo que valia "antes".

He hecho un log al principio y final de cada metodo y la variable descripcion entra y sale mal, no la modifico yo en mis funciones.
He pensado que podria ser el encoding, pero las 'ñ' y las tildes las muesta, ademas todo está en utf-8.
HE pensado que podria ser por los interceptores, pero no hay nada en ese codigo que me haga pensar que concatena un string o algo similar.
Tambien me he fijado en que, por ejemplo en los campos select, si yo hago un log, cada vez que le doy a guardar y no cumple los requisitos por validacion, me lo concatena, si yo por ejemplo escojo la primera vez la hora 14, la segunda vez la hora 16 y la tercera vez la hora 5, la variable hora tiene el valor "5, 16, 14".
Es como si guardara un historial de todos los valores.

El problema real lo tengo en el campo descripcion, ya que en el resto de campor puedo hacer un split(", ")[0] y obtener el ultimo valor, pero si en descripcion alguien mete una coma y un espacio, lo detectará y lo partirá por ahi, entonces truncara el string descripcion.

No se si me he explicado muy claro, espero que si

Gracias un saludo
  #2 (permalink)  
Antiguo 09/03/2015, 03:42
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema struts me modifica los datos

Pues está claro que en vez de sustituir el valor lo concatenas, ¿dónde? Pues tendrás que revisar tu código, puede ser que ya lo estés concatenando en el navegador o que lo hagas en el servidor.
__________________
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.
  #3 (permalink)  
Antiguo 09/03/2015, 03:52
 
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: problema struts me modifica los datos

Me he dado cuenta de que me sale esta excepcion en el tomcat, y no parece ser una clase mia
mar 09, 2015 10:27:25 AM org.apache.catalina.session.StandardSession writeObject
Advertencia: No puedo serializar atributo de sesión org.apache.struts2.util.InvocationSessionStore.inv ocationMap para sesión B867A53B90E1A22975849CCADE2B9F56
java.io.NotSerializableException: com.opensymphony.xwork2.inject.ContainerImpl$Const ructorInjector
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1181)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:347)
at com.opensymphony.xwork2.inject.util.ReferenceMap.w riteObject(ReferenceMap.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(Object StreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1541)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1506)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1541)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1506)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1541)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1506)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.defaultWriteFields(Obje ctOutputStream.java:1541)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1506)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:347)
at java.util.HashMap.writeObject(HashMap.java:1133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(Object StreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectO utputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1429)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1175)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:347)
at org.apache.catalina.session.StandardSession.writeO bject(StandardSession.java:1671)
at org.apache.catalina.session.StandardSession.writeO bjectData(StandardSession.java:1077)
at org.apache.catalina.session.StandardManager.doUnlo ad(StandardManager.java:430)
at org.apache.catalina.session.StandardManager.unload (StandardManager.java:351)
at org.apache.catalina.session.StandardManager.stopIn ternal(StandardManager.java:516)
at org.apache.catalina.util.LifecycleBase.stop(Lifecy cleBase.java:232)
at org.apache.catalina.core.StandardContext.stopInter nal(StandardContext.java:5655)
at org.apache.catalina.util.LifecycleBase.stop(Lifecy cleBase.java:232)
at org.apache.catalina.manager.ManagerServlet.undeplo y(ManagerServlet.java:1359)
at org.apache.catalina.manager.ManagerServlet.doGet(M anagerServlet.java:379)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:727)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:208)
at org.apache.catalina.filters.SetCharacterEncodingFi lter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBas e.invoke(AuthenticatorBase.java:610)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.p rocess(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnect ionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProce ssor.doRun(AprEndpoint.java:2441)
at org.apache.tomcat.util.net.AprEndpoint$SocketProce ssor.run(AprEndpoint.java:2430)
at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
  #4 (permalink)  
Antiguo 09/03/2015, 05:05
 
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: problema struts me modifica los datos

me he dado cuenta de que en cierta parte de la pagina, el html es:
<input type="hidden" name="descripcion" value="Esta+es+mi+descripcion"/><input type="hidden" name="descripcion" value="Esta%2Bes%2Bmi%2Bdescripcion"/>
Me sale un input cada vez que cambio un valor.
Esto no esta en mis ficheros, (lo he revisado muy bien y a conciencia), sino que probablemente se genere dinámicamente "gracias" a struts2, por lo que no es que concatene yo algo en algun lugar de mi codigo, sino que hay varios elementos con el mismo "name". Como puedo hacer para obtener solo uno de estos elementos? que no me los coja todos o que solo aparezca uno.
Gracias
  #5 (permalink)  
Antiguo 09/03/2015, 05:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema struts me modifica los datos

Struts no va a crear cosas porque sí, en algún lugar tú le estás diciendo que ese es el comportamiento que tiene que tener.

Dices que te aparecen dos campos con el mismo nombre y en tu jsp o lo que uses no lo tienes así, pues entonces tendrás que investigar por dónde pasa cada vez que cambias un valor, si ese campo te lo añade llamando al servidor o lo está haciendo en el navegador.

Nadie puede adivinar qué tienes mal en el código/configuración sin verlo, lo que no significa que copies todo lo que tengas para que alguien lo repase. Tienes que estudiar qué es lo que está pasando y pegar las partes que crees que pueden estar afectando.
__________________
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.
  #6 (permalink)  
Antiguo 10/03/2015, 01:51
 
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: problema struts me modifica los datos

vale, resulta que el fallo era que tenia un "display:table" dentro del tag "s:form", y un atributo del "display:table" era form="Id del formulario", si quito ese atributo, funciona perfectamente, el problema supongo que seria hacer referencia al formulario dentro del propio formulario.
Asi que al final, yo no concatenaba nada.
  #7 (permalink)  
Antiguo 10/03/2015, 02:21
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: problema struts me modifica los datos

Buenas,

Fijate que hasta ahora habias omitido el dato mas importante, que no podemos adivinar: que usabas displaytag.
De hecho en ningun sitio habias indicado que utilices una tabla.

Cita:
Tengo un formulario con 4 campos:
- Tipo: radio con 4 valores posibles
- Descripcion: un textfield
- Fecha: un datepicker para escoger la fecha
- hora: son dos select para seleccionar hora y minuto.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #8 (permalink)  
Antiguo 10/03/2015, 02:28
 
Fecha de Ingreso: febrero-2015
Mensajes: 10
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: problema struts me modifica los datos

Tienes razon, se me pasó ponerlo, aunque nadie se imaginaba que fuera por culpa de la tabla, ni me habia fijado que estaba ese atributo. Es lo que pasa cuando coges el proyecto que ha hecho otra persona jaja
Gracias

Etiquetas: jsf, jsp, spring, struts
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 14:10.