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>


14 Comentarios en “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)…”

  1. Antonio | 01/02/2010 a las 03:49:15

    Hola

    Me gustaría preguntaros un par de cosas ya que estoy en un problemilla bastante similar al que tuvieron ustedes y quizás ya lo resolvieron.

    Cosa 1: Tengo un formulario que muestra posteriormente un listado de clientes que cumplen las condiciones del formulario, como en algunas ocasiones el listado de clientes puede ser muy largo (30 o 40 clientes) me gustaría hacer un “paginador” para que me muestre los resultados de X en X y dando a Siguiente o a Anterior se puedan seguir viendo los resultados…
    Los resultados los tengo en un ArrayList y hasta ahora lo que consigo es que me muestre los 10 primeros y al dar a siguiente me muestra del 11 al 20 pero al pasar al de 11 a 20 no se me muestra el Header ni el footer…
    ¿Como podría hacer que saliera el header y el footer?

    Cosa 2: Me gustaría que al picar en un cliente determinado me mostrara los datos que ya tengo de dicho cliente (nombre, apellidos…etc) y todos los pedidos que haya realizado hasta el momento…
    ¿Como puedo pasar todos los parametros que tengo ya del cliente? por la URL me parece feo….
    ¿como deberia hacer la secuencia logica para que me mostrara los pedidos? Crear un action que recoja todos los datos del cliente y a partir de ahi formar el nuevo JSP con los datos y los pedidos?

    En esto ando algo más “perdido” de como hacerlo.

    Espero que me peudan ayudar.

    Un cordial saludo

  2. sergio | 02/02/2010 a las 15:35:49

    Gracias por dejar un comentario en serunix.com

    La primera pregunta, desafortunadamente tuvimos el mismo caso… y lamentablemente no tuvimos otra cosa que hacer que no incluirlo por el tiles si no directamente en la JSP… fue lo peor, pero realmente no se por que se pierde…

    La segunda pregunta, la verdad es que lo suyo en que pasaras el id del cliente solamente por la url (es feo)… y en action buscar al cliente para mostrar los datos en la nueva JSP, y si no quieres hacer get, púes hazte un form con método post, y envía un campo con el id… mmmm no sé necesitaria ver más el caso para decirte algo más concreto… en fin… si tienes más dudas por favor no dudes en dejar tu comentario…

    saludos

  3. Antonio | 23/02/2010 a las 16:09:16

    Hola Sergio

    Vuelvo a dejaros una preguntilla para ver si me la respondeis igual de bien que la otra vez que me atasque un poco.

    Tal y como tengo planteada una aplicación con Tiles y Struts 2 se me plantea un pequeño problema:

    En el struts.xml tengo

    helloWorldTileDefinition

    y en el tiles.xml

    Basandome en este “formato de uso” de Struts 2 y Tiles se me plantea el problema de en una opción si el usuario pulsa en la opcion 1 llamo a un action pero si pulsa en la opcion 2 debe llamar a un Servlet.

    Por lo que en resumen mi pregunta es como he de hacer para llamar a un servlet.

    Lei lo que viene en el libro struts 2 in action y no me quedo nada claro….

    Espero que me podais ayudar.

    Un cordial saludo

  4. Antonio | 23/02/2010 a las 16:11:07

    Hola Sergio

    EDITO: Vuelvo a poner el comentario pero esperando que se vea bien el codigo.

    Vuelvo a dejaros una preguntilla para ver si me la respondeis igual de bien que la otra vez que me atasque un poco.

    Tal y como tengo planteada una aplicación con Tiles y Struts 2 se me plantea un pequeño problema:

    En el struts.xml tengo

    helloWorldTileDefinition

    y en el tiles.xml

    Basandome en este “formato de uso” de Struts 2 y Tiles se me plantea el problema de en una opción si el usuario pulsa en la opcion 1 llamo a un action pero si pulsa en la opcion 2 debe llamar a un Servlet.

    Por lo que en resumen mi pregunta es como he de hacer para llamar a un servlet.

    Lei lo que viene en el libro struts 2 in action y no me quedo nada claro….

    Espero que me podais ayudar.

    Un cordial saludo

  5. Antonio | 23/02/2010 a las 16:15:06

    Hola Sergio

    EDITO 2: Vuelvo a poner el comentario pero esperando que se vea bien el codigo.

    Vuelvo a dejaros una preguntilla para ver si me la respondeis igual de bien que la otra vez que me atasque un poco.

    Tal y como tengo planteada una aplicación con Tiles y Struts 2 se me plantea un pequeño problema:

    En el struts.xml tengo

    helloWorldTileDefinition

    y en el tiles.xml

    Basandome en este “formato de uso” de Struts 2 y Tiles se me plantea el problema de en una opción si el usuario pulsa en la opcion 1 llamo a un action pero si pulsa en la opcion 2 debe llamar a un Servlet.

    Por lo que en resumen mi pregunta es como he de hacer para llamar a un servlet.

    Lei lo que viene en el libro struts 2 in action y no me quedo nada claro….

    Espero que me podais ayudar.

    Un cordial saludo

  6. Antonio | 23/02/2010 a las 16:18:42

    Bueno por lo que veo no se puede poner codigo asique si me decis como hacerlo o como enviartelo si sin el mismo no me puedes solucioanr el problema dime y te envio de nuevo.

    Un cordial saludo y perdon por el triple post =

  7. sergio | 24/02/2010 a las 17:04:48

    hola¡¡¡¡¡

    1
    
       import ......
  8. sergio | 24/02/2010 a las 17:09:29

    pre lang=”html4strict” line=”1″

    /pre

    claro no se te olvide cerrar las <>

  9. Antonio | 25/02/2010 a las 04:18:50

    Hola Sergio

    No se muy bien a que te refieres con tu respuesta si a que así podre llamar al servlet o a que así podre escribir codigo xml en el comentario.

    Decirte que el JSP desde el que quiero acceder al servlet esta en WebContent y el Servlet que quiero cargar le tengo en src en el package prueba que no se si eso influira en que no sepa hacer nada con el.
    En el JSP si que tengo import=”prueba.*”

    Gracias por tu pronta respuesta.

    Un cordial saludo.

    P.D: Pruebo a poner esto pa ver si asi puedo poner codigo

    HOLA
    
  10. Antonio | 25/02/2010 a las 05:43:03

    En struts.xml

    
          HelloWorld.jsp                   
    

    En tiles.xml

    
    
    		
  11. sergio | 25/02/2010 a las 07:21:17

    Hola antonio

    noooo a lo que me referia es a lo que me habias dicho que querias pegar tu código, y la respuesta anterior es que lo puedes pegar en tus comentarios de esta página con la etiqueta :
    pre lang=”html4strict” line=”1″
    … PEGA AQUí
    /pre

    pero que no se te olvide abrir “” en cada cierre y apertura de etiqueta “pre”…
    y con respecto al Servlet:
    1.- Es neceario llamar a un servlet?
    2.- NO podrías hacer la lógica en un ActionForm?

    si te peudo ayudar en algo dime porfavor.

    saludos

  12. Antonio | 26/02/2010 a las 02:59:32

    Sergio MUCHAS GRACIAS otra vez más por tu rápìda respuesta.

    Quizás solucionemos más respondientote a las 2 preguntas que me haces y explicándote que es lo que quiero hacer y quizás me des una solución mucho más elegante que la que intento plantear.

    Lo que quiero hacer: tengo una opción en la que se permite a los usuarios subir imagenes….luego “el administardor” las valida para subirlas definitiviamente por lo q tiene 3 opciones ACEPTAR, BORRAR o DESCARGAR….si acepta se sube a la BD o si borra se borra de la carpeta intermedia ( esto ya esta hecho y funciona al 100%) pero si doy al enlace de DESCARGAR lo unico que me hace es abrirme el fichero dentro del navegador…pero no me sale la pantalla de descarga con los botones de ABRIR o GUARDAR para x ejemplo guardarlo en C: en cambio si sobre el enlace hago boton derecho Guardar como.. si q me deja guardar el fichero fisicamente en C:

    Xa conseguir q pudiera gaurdar el fichero fisicamente mediante la pantalla busque y lo unico q encontre fue un servlet, q contenía un JSP q al dar a descargar se bajaba el fichero mediante la ventana y de aqui q quisiera llamar al servlet…

    Por lo q te respondo:

    1. Si hay otro modo de hacerlo no es 100% necesario sino si que querría hacerlo ya que podría darse el caso de una imagen muy grande o muy pequeña y que fuera necesario descargarla…si hay otro modo indicame como pq no tengo ni idea de como hacerlo….

    2. Lo consigo hacer ya q si doy a descargar me cambia de pantalla y pone el fichero 1.JPG se ha descargado correctamente xo sin aparecerme la pantalla de guardar…x lo q no se ha descargado realmente el fichero.
    Quizás si en el cambio pudiera llamar al servlet…de JAVA a JAVA se puede llamar al Servlet ??

    Vaya lio que me esta causando dicha opción.

    Espero que me puedas ayudar.

    GRACIAS por las molestias que te estás tomando.

    Un cordial saludo

  13. sergio | 28/02/2010 a las 14:25:20

    ahhh ya entendí.. llamar a un servelt no es mala idea… pero también lo puedes hacer mediante los action, aquí hay una idea de como hacerlo… pero como te sea más fácil a ti… por que la verdad es que tampoco esta mal… http://struts.apache.org/2.0.14/docs/stream-result.html

    y no recomiendo que llamas al servlet desde el Action…
    si necesitas ayuda dime…

    saludos

  14. Antonio | 04/03/2010 a las 02:15:09

    GRACIAS Sergio

    Con el Stream result lo solucione.

    Este enlace me vino bien le pongo para futuros visitantes si no te importa.
    http://www.javahowto.net/struts2/dynamic-mime-type-on-stream-result-struts-2/

    GRACIAS una vez mas.

    Un cordial saludo

Dejar un comentario

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