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

J2ee+Struts 2

Estas en el tema de J2ee+Struts 2 en el foro de Java en Foros del Web. Buenas, estoy realizando una aplicación web en j2ee y struts 2 y varias dudas me vienen a la cabeza, bueno mas bien, varios errores ocurren ...
  #1 (permalink)  
Antiguo 06/09/2010, 14:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
J2ee+Struts 2

Buenas, estoy realizando una aplicación web en j2ee y struts 2 y varias dudas me vienen a la cabeza, bueno mas bien, varios errores ocurren en mi aplicación.

Lo primero que voy a hacer es detallar un poco lo que quiero hacer para poneros en situación.

Lo que estoy realizando es una página donde el usuario tenga que rellenar varios formularios.
En principio hacía una validación mediante el Action de que los campos estuviesen llenos pero después intenté hacer una validación mediante ficheros XML, opción que finalmente deseché por no entender muy bien y compicarseme la vida.

Bueno, lo que intento hacer es, primeramente rellenar un formulario, al darle a continuar compruebe que todo sea correcto y cargue un nuevo formulario, aquí hariamos la misma operacion, es decir, al darle a continuar vuelva a comprobar que todo esté correcto y una vez mas carga un tercer formulario, pero esta vez, necesito datos del formulario anterior, porque dependiendo de unos de los campos, carga un formulario u otro.


El caso es que no se muy bien como hacerlo, ni siquiera se muy bien como hacer para las comprobaciones de los campos de los anteriores. Me explico:

En principio tenía una accion para cada formulario pero me daba un error, hasta que decidi trabajar con la misma accion pero con distintos metodos para cada formulario. Ahora no me funcionan las validaciones por que el metodo validate no puede ser comun para ambos formularios...


Bueno espero que me entiendan y que me puedan echar una mano

un saludo y muchas gracias
  #2 (permalink)  
Antiguo 06/09/2010, 16:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

El método validate() (supongo que será el que usas para validar) se ejecuta siempre si tu action hereda de Action (o ActionSupport) y si pasa por el interceptor workflow(defaultstack).

Aunque puedes definir en struts.xml qué métodos llamarán a validate(), en tu caso, si quieres una solución rápida y sencilla (aunque no elegante) te recomendaría lo siguiente.

Ya que vas a llamar a tres formularios desde la misma action, crea en cada uno de ellos un campo oculto con el nombre del formulario, de esta forma tu método validador podrá saber fácilmente qué campos validar según el contenido del campo oculto.

Para pasar los datos de un formulario a otro es igual de sencillo, cuando vuelves de una action, los objetos que estén declarados con sus getter y setter (beans), podrán ser leídos desde la jsp de destino, siempre que les pongas el mismo nombre (name) que a los objetos de la action.

Si quieres que esos datos se vean, usa cajas de textos, si quieres que no, utiliza un campo hidden. Échale un vistazo a las etiquetas "HTML" de struts.
  #3 (permalink)  
Antiguo 07/09/2010, 11:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
El método validate() (supongo que será el que usas para validar) se ejecuta siempre si tu action hereda de Action (o ActionSupport) y si pasa por el interceptor workflow(defaultstack).
Sip, estás en lo cierto. El método validate() es que utilizo para validar, o al menos eso es lo que intento.

En cuanto al workflow no estoy muy seguro de a que te refieres

Cita:
Iniciado por Xerelo Ver Mensaje
.... crea en cada uno de ellos un campo oculto con el nombre del formulario, de esta forma tu método validador podrá saber fácilmente qué campos validar según el contenido del campo oculto.
¿te refieres a poner en cada formulario algo del tipo <s:hidden name="Form1"/> y desde el validate recuperar ese nombre?, porque también lo intenté pero no se como recuperar el nombre desde el Action

Cita:
Iniciado por Xerelo Ver Mensaje
Para pasar los datos de un formulario a otro es igual de sencillo, cuando vuelves de una action, los objetos que estén declarados con sus getter y setter (beans), podrán ser leídos desde la jsp de destino, siempre que les pongas el mismo nombre (name) que a los objetos de la action.
Aquí si que ya estoy perdido de todo ....

Cita:
Iniciado por Xerelo Ver Mensaje
Si quieres que esos datos se vean, usa cajas de textos, si quieres que no, utiliza un campo hidden. Échale un vistazo a las etiquetas "HTML" de struts.
Supongo que será algo del estilo <s:textfield value="Aqui recuperar el texto no se como">

Un saludo Xerelo e graciñas!!!
  #4 (permalink)  
Antiguo 07/09/2010, 12:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

Vale, por lo que veo hay una parte muy concreta que es la que te confunde.

Cita:
¿te refieres a poner en cada formulario algo del tipo <s:hidden name="Form1"/> y desde el validate recuperar ese nombre?, porque también lo intenté pero no se como recuperar el nombre desde el Action
Los action.class, además de servir para ejecutar tu programa (lógica de negocio), sirve para traspasar valores desde la JSP (capa vista) al código.

Me dejo de teorías y te pongo un ejemplo claro.

Código Javascript:
Ver original
  1. public tuAction extends ActionSupport {
  2.  
  3. private String formulario;
  4.  
  5. public execute () {
  6. ...
  7. }
  8.  
  9. public validate () {
  10.  
  11. if (getFormulario().equals("formu1") {...} else {..}
  12.  
  13. }
  14.  
  15. public void setFormulario(String form){
  16. this.formulario = form;
  17. }
  18.  
  19.  
  20. public String getFormulario(){
  21. return this.formulario;
  22. }
  23.  
  24. }

Vale, pues ese atributo formulario, servirá para pasar automáticamene una cadena entre la JSP y el action, y viceversa.

<s:text name="formulario"/> (hay más etiquetas que te sirven)

Muestra en la JSP el contenido del atributo formulario

<s:hidden name="formulario" value="formu1"/> (otras etiquetas te servirían)

Hará que al enviar el formulario que lo contiene, el atributo formulario del action valga formu1. Y ese valor lo puedes leer sin problemas en el validate()

http://www.mkyong.com/struts2/struts...value-example/

Este traspaso de valores es lo básico para empezar a usar Struts2, así que te recomendaría que leyeses un poco sobre le tema.
  #5 (permalink)  
Antiguo 07/09/2010, 12:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
<s:text name="formulario"/> (hay más etiquetas que te sirven)

Muestra en la JSP el contenido del atributo formulario

<s:hidden name="formulario" value="formu1"/> (otras etiquetas te servirían)
He leido el "pequeño" manual que me enviaste y entiendo lo que me quieres decir y lo que significa. De hecho probe y de un jsp a otro lo pasa perfectamente, sin embargo a la hora de leerlo en el action me da un error, concretamente este:

Stacktraces
java.lang.NullPointerException

Un saludo
  #6 (permalink)  
Antiguo 07/09/2010, 15:50
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

Si te lo pasa de un JSP a otro es que lo está pasando por el action, supongo que te faltará alguna tontería.

¿Cuándo te falla?¿De dónde debería leer el valor que provoca el nullpointer?¿Qué tipo de result usas en el struts.xml? ¿Has creado los getter y setter con mayúscula getFormulario? No puedes utilizar el redirect, ya que con ese creas una nueva request, y por lo tanto pierdes los datos.

Si pones trozos de código sería más fácil decirte qué te falta.
  #7 (permalink)  
Antiguo 07/09/2010, 16:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Justo me disponía a apagar el ordenador cuando se me dio por ver el foro, pero voy a hacer un esfuerzo.

Este es el formulario de la clase registroC.jsp
Código java:
Ver original
  1. <s:form action="saveC" method="post">  
  2.         <s:hidden name="formulario" value="form1"/>
  3.         <s:submit key="submit" cssClass="boton" />                 
  4. </s:form>

Este es el codigo del action
Código java:
Ver original
  1. public class registroP  extends ActionSupport {
  2. private String formulario;
  3.  
  4. public void validate(){
  5.     if (getFormulario().equals("form1")){
  6.         if (cBean.getMarca().length()!=0){
  7.             addFieldError( "cBean.marca", "*" );
  8.         }
  9.                 ...
  10.           }
  11. }
  12.  
  13. public void setFormulario(String form){
  14.     this.formulario = form;
  15. }
  16.    
  17. public String getFormulario(){ 
  18.     return this.formulario;
  19. }


Y es aqui justo en el if(getFormulario()).... donde me da el error mencionado.

No encuentro el fallo.

Un saludo




Edito:Problema solucionado, mñn te cuento como arregle.

Un saludo

Última edición por Ruben82; 07/09/2010 a las 16:39
  #8 (permalink)  
Antiguo 08/09/2010, 10:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

La culpa era del execute que como utilizo la misma action para validar todos los formulario, también hacía distinción entre distintos executes.

Solucionado pues, aunque ahora tengo otra duda que no se si preguntarla aquí o crear otro hilo nuevo.

Me explico:

Llegado a este punto necesitaría saber algo de conexión a base de datos, selección de campos e inserción bajo struts 2. ¿Alguna ayuda o manual que me pueda guiar?

Un saludo

Edito: hasta ahora en el validate solo compruebo que los campos están vacíos pero ¿sería posible comprobar también que además de contener "algo" que fuera correcto?, es decir que por ejemplo un número de teléfono contenga sólo números y 9 digitos
  #9 (permalink)  
Antiguo 08/09/2010, 13:00
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

A ver, exagerando un poco, una Action es como una clase cualquiera de Java salvo en su relación con las JSP. Así que puedes validar lo que quieras y cómo quieras, la diferencia es que si no es correcto añades un error de forma que la JSP lo reciba.

Para validar teléfonos, email,... deberías usar expresiones regulares, aunque siempre puedes hacerlo con chapucillas varias.

Expresión regular para email
Código Javascript:
Ver original
  1. if (!email.matches(".+@.+\\..+")) {
  2.  
  3. addFieldError( "cBean.marca", "*" );
  4.  
  5. }

Con respecto a bases de datos, Struts no te soluciona nada, tendrás que usar JDBC como en cualquier clase de J2SE. Existen frameworks como Ibatis o Hibernate, que se combinan bien con Struts, pero en tu caso creo que sólo te complicaría el asunto.

Edito: Me olvidaba decirte que aunque el execute se ejecuta siempre (si no configuras lo contrario), tus action pueden llamar a un método/función concreta de tu Action.class, de forma que el execute sólo lo dejarías para elementos comunes.

<action name="login1" ... class="tuAction.class" method="funcion1">...</action>

<action name="login2" ... class="tuAction.class" method="funcion2">...</action>

Donde funcion1() y funcion2() son métodos de tuaction.class
  #10 (permalink)  
Antiguo 08/09/2010, 13:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
A ver, exagerando un poco, una Action es como una clase cualquiera de Java salvo en su relación con las JSP. Así que puedes validar lo que quieras y cómo quieras, la diferencia es que si no es correcto añades un error de forma que la JSP lo reciba.

Para validar teléfonos, email,... deberías usar expresiones regulares, aunque siempre puedes hacerlo con chapucillas varias.

Expresión regular para email
Código Javascript:
Ver original
  1. if (!email.matches(".+@.+\\..+")) {
  2.  
  3. addFieldError( "cBean.marca", "*" );
  4.  
  5. }

Con respecto a bases de datos, Struts no te soluciona nada, tendrás que usar JDBC como en cualquier clase de J2SE. Existen frameworks como Ibatis o Hibernate, que se combinan bien con Struts, pero en tu caso creo que sólo te complicaría el asunto.

Edito: Me olvidaba decirte que aunque el execute se ejecuta siempre (si no configuras lo contrario), tus action pueden llamar a un método/función concreta de tu Action.class, de forma que el execute sólo lo dejarías para elementos comunes.

<action name="login1" ... class="tuAction.class" method="funcion1">...</action>

<action name="login2" ... class="tuAction.class" method="funcion2">...</action>

Donde funcion1() y funcion2() son métodos de tuaction.class

Ok. tomo nota.

La verdad es que estoy un poco verde, pero es que me han metido prisa para presentar un proyecto y no tengo ningun tiempo y me veo a marchas forzadas surgiendo problemas continuamente.

otra pregunta que te queria hacer:

en el tercer formulario que te comente cargo mediante javascript un formulario u otro dependiendo de los valores que tenga. te pongo el codigo pare entendernos mejor


Código java:
Ver original
  1. <div id="form">        
  2.         <p>¿Opcion 1 o 2?
  3.             <input type="button"  value="1" onclick="show1()"/>
  4.             <input type="button"  value="2" onclick="show2()"/></p>
  5.         </div>
  6.        
  7.         <div id="formulario1" style="visibility:hidden">
  8.             <s:form action="save" method="post">                   
  9.                 <s:hidden name="formulario" value="primero"/>      
  10.                 <s:textfield key="nombre"/>  
  11.                 <s:textfield key="apellido"/>  
  12.                 <s:submit key="submit" cssClass="boton" />             
  13.                 <s:reset key="Reset" cssClass="boton" />         
  14.             </s:form>
  15.         </div>
  16.            
  17.         <div id="formulario2" style="visibility:hidden">
  18.             <s:form action="save" method="post">                   
  19.                 <s:hidden name="formulario" value="segundo"/>      
  20.                 <s:textfield key="telefono"/>  
  21.                 <s:textfield key="direccion"/>  
  22.                 <s:submit key="submit" cssClass="boton" />             
  23.                 <s:reset key="Reset" cssClass="boton" />         
  24.             </s:form>
  25.         </div>
  26. </div>

Código Javascript:
Ver original
  1. function show1(){
  2.     var No = document.getElementById("formulario2");
  3.     if (No.style.visibility=="visible"){
  4.         No.style.visibility="hidden";
  5.     }else if (document.getElementById("formulario1").style.visibility=="hidden"){
  6.         No.style.visibility="visible";
  7.     }
  8. }
  9.  
  10. function show2(){
  11.     var Si = document.getElementById("formulario1");
  12.     if (Si.style.visibility=="visible"){
  13.         Si.style.visibility="hidden";
  14.     }else if (document.getElementById("formulario2").style.visibility=="hidden"){
  15.         Si.style.visibility="visible";
  16.     }    
  17. }


El caso es que al pasarle esto al action y comprobar si los datos son correctos al volver a cargar otra vez esta pagina aparece por defecto ocultos y lo que quiero yo es que aparezca la que estaba cargada antes. Se te ocurre algo?


Un saludo y muchisimas gracias!!!!!
  #11 (permalink)  
Antiguo 08/09/2010, 14:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

Habría otras formas de hacerlo, pero para no liarte y ya que te manejas con javascript

Solución rápida:

Crea un método en javascript que se cargue en el onload del body (o onready de jquery)

Código Javascript:
Ver original
  1. <script>
  2. formu = '<s:property value="formulario">';
  3.  
  4. function inicio() {
  5. if (formu=='formulario1'){
  6. show1();}
  7. else if (formu=='formulario2'){
  8. show2();
  9. }
  10. }
  11. </script>
  12.  
  13. <body onload="inicio();">

Las JSP se generan en el servidor, mientras que el javascript en el navegador, así cuando la JSP llega al navegador, tendrás que

formu = 'formulario1/formulario2/null' dependiendo de donde vengas.
  #12 (permalink)  
Antiguo 08/09/2010, 14:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
Habría otras formas de hacerlo, pero para no liarte y ya que te manejas con javascript

Solución rápida:

Crea un método en javascript que se cargue en el onload del body (o onready de jquery)

Código Javascript:
Ver original
  1. <script>
  2. formu = '<s:property value="formulario">';
  3.  
  4. function inicio() {
  5. if (formu=='formulario1'){
  6. show1();}
  7. else if (formu=='formulario2'){
  8. show2();
  9. }
  10. }
  11. </script>
  12.  
  13. <body onload="inicio();">

Las JSP se generan en el servidor, mientras que el javascript en el navegador, así cuando la JSP llega al navegador, tendrás que

formu = 'formulario1/formulario2/null' dependiendo de donde vengas.

Entiendo lo que me dices pero no me funciona porque por mucho que le indiques al método onload() al seguir el curso normal cuando llega al div del formulario y ve la equita "hidden" lo oculta. He probado a quitarle esa etiqeta y hacerlo todo mediante javascript pero se ve que el html prevalece sobre él.

¿Alguna solución?


un saludo
  #13 (permalink)  
Antiguo 08/09/2010, 16:20
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

No me había fijado en como hacías el show(), si quieres ocultar uno y mostar otro, ¿para qué haces una comprobación de en qué estado está cada uno?¿Lo que buscas no es que aparezca uno u otro?

Te recomiendo que en vez del visibility uses el display, así no queda el hueco del formulario no visible.

Código Javascript:
Ver original
  1. <head>
  2.  
  3. <script>
  4.  
  5. formu = '<s:property value="formulario">';
  6.  
  7.  
  8. function Inicio() {
  9.  
  10.     if (formu=='formulario1')
  11.         show1();
  12.     else if (formu=='formulario2')
  13.         show2();
  14. }
  15.  
  16. function show1(){
  17.  
  18.     document.getElementById("formulario2").style.display="none";
  19.     document.getElementById("formulario1").style.display="";
  20.    
  21. }
  22.  
  23. function show2(){
  24.     document.getElementById("formulario1").style.display="none";
  25.     document.getElementById("formulario2").style.display="";
  26. }
  27. </script>
  28.  
  29. </head>
  30. <body onload="Inicio();">
  31.  
  32. <div id="formulario1" style="display:none">
  33.  
  34. <div id="formulario2" style="display:none">

Puedes probar que esto funciona en un html cualquiera, sin usar struts. Bueno, también cambiarías <s:property value="formulario"> por formulario1/formulario2/undefined para simular los regresos de la action.

Para usar javascript sobre elementos HTML, te recomiendo que leas un poco de jQuery, es muy sencillo y te ahorra trabajo.
  #14 (permalink)  
Antiguo 08/09/2010, 17:19
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
No me había fijado en como hacías el show(), si quieres ocultar uno y mostar otro, ¿para qué haces una comprobación de en qué estado está cada uno?¿Lo que buscas no es que aparezca uno u otro?

Te recomiendo que en vez del visibility uses el display, así no queda el hueco del formulario no visible.

Código Javascript:
Ver original
  1. <head>
  2.  
  3. <script>
  4.  
  5. formu = '<s:property value="formulario">';
  6.  
  7.  
  8. function Inicio() {
  9.  
  10.     if (formu=='formulario1')
  11.         show1();
  12.     else if (formu=='formulario2')
  13.         show2();
  14. }
  15.  
  16. function show1(){
  17.  
  18.     document.getElementById("formulario2").style.display="none";
  19.     document.getElementById("formulario1").style.display="";
  20.    
  21. }
  22.  
  23. function show2(){
  24.     document.getElementById("formulario1").style.display="none";
  25.     document.getElementById("formulario2").style.display="";
  26. }
  27. </script>
  28.  
  29. </head>
  30. <body onload="Inicio();">
  31.  
  32. <div id="formulario1" style="display:none">
  33.  
  34. <div id="formulario2" style="display:none">

Puedes probar que esto funciona en un html cualquiera, sin usar struts. Bueno, también cambiarías <s:property value="formulario"> por formulario1/formulario2/undefined para simular los regresos de la action.

Para usar javascript sobre elementos HTML, te recomiendo que leas un poco de jQuery, es muy sencillo y te ahorra trabajo.
Ok. Lo pruebo y te comento.

Por otro lado he estado intentando hacer alguna insercion en la base de datos pero no hace nada. No muestra error ni registro en la BBDD.....

Lo que he intentado hacer primeramente es desde el propio validate llamar a una funcion por ejemplo insertar() que mediante el objeto rellene la query y luego inserte pero como te dije no hizo nada asi que la segunda opcion fue algo parecido al editservice que explica en la página de struts para validar mediante XML. Lo que hago es crear una interfez y una clase que implemente esa interfaz y ahi un metodo saveObjeto, que al = que antes pilla el objeto y rellena la query de insercion, pero tampoco hace nada, así que viendo la hora que es y que mi despertador suena a las 6 pues me voy para cama.


Muchas gracias por todo.

Un saludo
  #15 (permalink)  
Antiguo 09/09/2010, 11:10
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

Como ya te dije, el tema de BBDD funciona igual que si no usaras Struts, así que te recomiendo que pruebes las cosas siempre que puedas por separado.

Accede a la BBDD con una clase fuera del proyecto, con su main() y lo que haga falta. Cuando te funcione, traslada el código a Struts.

Y no lo hagas en el validate(), se llama así porque se usa para eso, para validar, y meter datos en la BBDD no lo es.

Te recuerdo que

<action name="guardarDatos" ... class="tuAction.class" method="saveObjeto">
...
</action>

pasará por el validate, el execute, y saveObjeto.

Captura los errores que te pueda dar el acceso a la BD, así sabrás que estás haciendo mal, si la conexión, la consulta, los parámetros...
  #16 (permalink)  
Antiguo 09/09/2010, 11:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
Como ya te dije, el tema de BBDD funciona igual que si no usaras Struts, así que te recomiendo que pruebes las cosas siempre que puedas por separado.

Accede a la BBDD con una clase fuera del proyecto, con su main() y lo que haga falta. Cuando te funcione, traslada el código a Struts.

Y no lo hagas en el validate(), se llama así porque se usa para eso, para validar, y meter datos en la BBDD no lo es.

Te recuerdo que

<action name="guardarDatos" ... class="tuAction.class" method="saveObjeto">
...
</action>

pasará por el validate, el execute, y saveObjeto.

Captura los errores que te pueda dar el acceso a la BD, así sabrás que estás haciendo mal, si la conexión, la consulta, los parámetros...

Ahora que ya había conseguido insertar datos en la BD,jejeje, pero claro lo que tu dices tiene todo el sentido del mundo, voy a probarlo, porque hasta ahora estaba haciendo lo que dice en este pequeño tutorial.

http://www.roseindia.net/struts/struts2/struts-2-mysql.shtml

Pero probaré lo que me dices.

Por otro lado, lo que me indicaste arriba de cargar el formulario cuando al darle a continuar hace la comprobacion de campos vacíos y carga la misma página no me funciona. Supongo que como se cargan las propiedas en el body y luego se carga el div tiene éste último prioridad.
Seguiré probando cosas distintas a ver si me sale.

Muchas gracias por todo amigo
  #17 (permalink)  
Antiguo 09/09/2010, 16:32
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: J2ee+Struts 2

Hombre, sigue la máxima, si funciona no lo toques.

De todas formas, lo único que tendrías que hacer sería copiar lo que aparece en el ejemplo de RoseIndian, en su propio método. Ese método lo llamas con una action con lo de method que te expliqué. Simplemente tienes que tener cuidado y pensar que el validate() y el execute() se van a ejecutar también, así que si hay algo en ello que pudiera afectar a tu método, busca la manera de puentearlo con algún if.

Cita:
Por otro lado, lo que me indicaste arriba de cargar el formulario cuando al darle a continuar hace la comprobacion de campos vacíos y carga la misma página no me funciona.
Igual no entiendo bien lo que quiers hacer. No debes usar la action sólo para validar, lo lógico es que valides antes de insertar los datos, pero en la misma action (recuerda que pasa a narices por el validate). En caso de error (si añades algún addActionError o similar en el validate) por defecto no ejecuta ni el execute ni el method que le hayas indicado a la action, volviendo a la JSP que la lanzó.

Yo haría el siguiente flujo

Cargar la JSP con los dos formularios

El usuario elige uno u otro, no puedes enviar a la vez los datos de dos formularios.

Rellena los datos y le da a enviar, donde tienes indicada una action con su method, pasa por el validate y comprueba que los campos son válidos, y sigue la ruta de execute y tu method, donde se supone que insertará los datos. Todo correcto o error, te devuelve a la JSP.

Si añades esta etiqueta en el JSP,puedes avisar de error en la validación

<s:if test="hasErrors()"><script>alert('Error en validacion');</script></s:if>

y con

<s:if test="hasMessage()"><script>alert('Insertado correctamente');</script></s:if>

y en tu method usando un addMessage(mensaje) puedes confirmar que todo ha ido birn.

Hay otras etiquetas para mostrar exactamente el mensaje que le pasas desde java, tanto para el error como para lo correcto.

Una vez hecho esto, el usuario rellena el segundo formulario, y sigue el mismo proceso, pero con otro method, y teniendo en cuenta que a su paso por validate no debe validar los mismos campos.
  #18 (permalink)  
Antiguo 10/09/2010, 13:49
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: J2ee+Struts 2

Cita:
Iniciado por Xerelo Ver Mensaje
Hombre, sigue la máxima, si funciona no lo toques.

De todas formas, lo único que tendrías que hacer sería copiar lo que aparece en el ejemplo de RoseIndian, en su propio método. Ese método lo llamas con una action con lo de method que te expliqué. Simplemente tienes que tener cuidado y pensar que el validate() y el execute() se van a ejecutar también, así que si hay algo en ello que pudiera afectar a tu método, busca la manera de puentearlo con algún if.



Igual no entiendo bien lo que quiers hacer. No debes usar la action sólo para validar, lo lógico es que valides antes de insertar los datos, pero en la misma action (recuerda que pasa a narices por el validate). En caso de error (si añades algún addActionError o similar en el validate) por defecto no ejecuta ni el execute ni el method que le hayas indicado a la action, volviendo a la JSP que la lanzó.

Yo haría el siguiente flujo

Cargar la JSP con los dos formularios

El usuario elige uno u otro, no puedes enviar a la vez los datos de dos formularios.

Rellena los datos y le da a enviar, donde tienes indicada una action con su method, pasa por el validate y comprueba que los campos son válidos, y sigue la ruta de execute y tu method, donde se supone que insertará los datos. Todo correcto o error, te devuelve a la JSP.

Si añades esta etiqueta en el JSP,puedes avisar de error en la validación

<s:if test="hasErrors()"><script>alert('Error en validacion');</script></s:if>

y con

<s:if test="hasMessage()"><script>alert('Insertado correctamente');</script></s:if>

y en tu method usando un addMessage(mensaje) puedes confirmar que todo ha ido birn.

Hay otras etiquetas para mostrar exactamente el mensaje que le pasas desde java, tanto para el error como para lo correcto.

Una vez hecho esto, el usuario rellena el segundo formulario, y sigue el mismo proceso, pero con otro method, y teniendo en cuenta que a su paso por validate no debe validar los mismos campos.
Problema del formulario que se oculta solucionado.

Sigo tus consejos, buenos aportes para mi.

Muchas gracias y perdona el retraso en la contestacion. Estoy super liado

Un saludo

Etiquetas: Ninguno
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 00:24.