Struts 2 - 通过Hyperlink传递给操作的参数在操作

时间:2018-02-07 16:19:36

标签: java jsp struts2

自从一个星期以来,我一直在努力解决这个问题,并且想到最后把它放在这里。我在Struts 2应用程序上工作并尝试使用一些参数从jsp文件调用一个新操作,但参数在操作中变为null。

在下面的jsp文件中,我正在创建一个名为pdfName的新超链接条目,然后将它们附加到名为pdfList的表中。当用户单击名为ListPDF的按钮时。所有这些链接都成功显示。但是,我希望当用户点击URL时,会向请求发送一个请求,该操作会提供pdf数据的byte [],然后在浏览器上进行流式传输。

JSP:

<s:url var="docs" action="fetchDocument">
    <s:param name="doc_name" value="%{docItem.name}"></s:param>
    <s:param name="doc_id" value="%{docItem.objectId}"> </s:param>
</s:url>        

var pdfName = '<a href=' +"${docs}" +' target="_blank">' + docItem.name + '</a>';

$('#pdfList').append('<tr><td>' + checkBox + '</td><td>' + pdfName + '</td></tr>');

问题是参数doc_name和doc_id在操作中变为空。

动作:

package com.b2bbank.mos.web.action;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

public class FetchDocument extends Base {

private static final long serialVersionUID = 1L;
private String doc_name;
private String doc_id;
public InputStream streamforPDFDoc;

public String fetchPDF() {

    HttpServletResponse response = ServletActionContext.getResponse();
    System.out.println("Doc ID: " + doc_id);
    System.out.println("Document Name: " + doc_name);

    byte[] doc_data = WorkDeskIntegration.getDocument(doc_name, doc_id);
    response.setContentLength(doc_data.length);

    if (doc_data != null) {
        streamforPDFDoc = new ByteArrayInputStream(doc_data);
    }

    return SUCCESS;
}

public String getDoc_name() {
    return doc_name;
}

public void setDoc_name(String doc_name) {
    this.doc_name = doc_name;
}

public String getDoc_id() {
    return doc_id;
}

public void setDoc_id(String doc_id) {
    this.doc_id = doc_id;
}

public InputStream getStreamforPDFDoc() {
    return streamforPDFDoc;
}

public void setStreamforPDFDoc(InputStream streamforPDFDoc) {
    this.streamforPDFDoc = streamforPDFDoc;
}

}

struts.xml中

<action name="fetchDocument" class="com.b2bbank.mos.web.action.FetchDocument" method="fetchPDF">
        <result name="success" type="stream">
            <param name="contentType">application/pdf</param>
            <param name="inputName">streamforPDFDoc</param>
            <param name="bufferSize">8192</param>
        </result>
    </action>

任何人都能帮助我正确的方向吗?我试过在SO上搜索无数帖子,但这些都不适合我。谢谢!

0 个答案:

没有答案