Necesito saber cómo llamar a un Struts2 acción de un botón que no se envíe el formulario. Cuando hago clic en el botón se debe llamar a un Struts2 acción que hará una llamada al servicio web a un servidor de SSRS (SQL Server Reporting Services). El servidor envía el informe a un arroyo que puse en la Respuesta. A continuación, muestra una ventana para descargar el archivo PDF. Con JSF es fácil, el botón de comando proporciona una «acción» atributo. Me gustaría que el equivalente de esto:

<h:commandButton id="editButton" value="Edit" action="#{myBean.edit}" />

public class MyBean {
public String edit() call web service, put the stream on the response return "OK"}}

Cómo en Struts2? Ajaxa? JQuery? Dojo? Soy nuevo en Struts2 y Ajax, hago un montón de JSF.

gracias

2 Comentarios

  1. 3

    Sin enviar el formulario, usted tendría AJAX.

    Pero ya que usted simplemente necesita para descargar un PDF, a continuación, realice una llamada llega a una Acción que devuelve un Flujo De Resultado (y no va a cambiar la página actual).

    Leer más aquí

    Especificando contentDisposition: attachment, se le pedirá al usuario de donde descargar el archivo (o la aplicación que desea usar para abrirlo), mientras que contentDisposition: inline abriría dentro del navegador, cambiar la página (que no es lo que quieres).

    A continuación, especifique la acción en la url y utilizarlo etiqueta de anclaje

    <s:url action="downloadAction.action" var="url">
        <s:param name="param1">value1</s:param>
    </s:url>
    <s:a href="%{url}" >download</s:a>

    y en Struts.xml

    <result name="success" type="stream">
       <param name="contentType">application/pdf</param>
       <param name="contentDisposition">attachment;filename="yourPDF.pdf"</param>
    </result>

    En la Acción que usted necesita para proporcionar (a través de un captador) un InputStream llamado inputStream.

    EDITAR

    Si quieres hacerlo desde un botón, como se pide en los comentarios:

    <input  type = "button" 
           value = "download" 
         onclick = "javascript:location.href='downloadAction.action';"
    />
    • Gracias, este es un buen punto de partida, pero si tengo que utilizar el tipo de entrada de botón ? Él no definir el atributo de acción. ¿Cómo ?
    • Muchas gracias por tu ayuda, voy a probar esta solución.
    • hola esta solución funciona, excepto que cuando hago clic en el botón, los datos introducidos en el formulario no son programados. Siempre es null.
    • Usted no ha proporcionado suficiente información para ayudar a usted. Publicar las partes pertinentes de: el código de la Acción, su Struts.xml config y su JSP fragmento de código. Por cierto, debe tener getters y setters para cada campo con el nombre propio, que coinciden en jsp, y pasar a través de un Interceptor de la Pila con al menos el básico interceptores a trabajar.
    • He publicado un tema con ejemplos de código. Usted puede encontrar aquí : stackoverflow.com/questions/19121675/…
    • Por favor, recuerde a aceptar respuestas cuando es útil (y a upvote tras alcanzar los 15 puntos de reputación)…

  2. 0

    En el dojo, puede crear un iframe y hacer una llamada ajax informe de servicio para obtener un pdf de nombre de archivo, a continuación, descargue el archivo pdf en ifrmae:

        var reportCP = new dijit.layout.ContentPane({
            content: dojo.create("iframe")
        });   
    
        new dijit.Button({
            label: "Report",
            onClick: function(){
    
                dojo.request.post(yourServiceUrl, {
                    data : yourData,
                    handleAs: "json"
                }).then( 
                    function(response){
                        reportCP.content.src=response.fileName;   
                    },
                    function(error){
                        alert(error);
                    }
                );
            }
        });  

    O puede utilizar la ventana.abrir para descargar el pdf de la corriente en una nueva ventana directamente , como:

    new dijit.Button({
        label: "Report",
        onClick: function(){
            window.open(yourReportServiceUrl,"","height=600, width=1000, scrollbars=1");
        }
    });  

Dejar respuesta

Please enter your comment!
Please enter your name here