自从一个星期以来,我一直在努力解决这个问题,并且想到最后把它放在这里。我在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上搜索无数帖子,但这些都不适合我。谢谢!