[英]Export dynamic data from a JSP page to CSV in Struts2
我正在嘗試實現用戶下載CSV
格式的文件的功能。 我已經完成了下載部分,並且能夠將JSP
轉換為CSV
格式,但是我面臨的問題是我無法將動態數據從JSP
傳輸到CSV
文件。 下載文件后,我看到了JSP tags
及其所有其他內容,而我只想查看數據,而不是JSP tags
或forms
等。
動作類:
public String viewReport() throws Exception {
boolean returnReport;
String filePath = "fileName.jsp";
File file = new File(filePath);
inputStream = new FileInputStream(file);
try {
returnReport = validateRequest();
if (returnReport) {
setIntgList(generateViewIntegrationReportData(getESignUIConfig()));
} else {
failureResponse(msgs, 400);
return null;
}
} catch (Exception e) {
e.printStackTrace();
msgs.add(new Message(ESignatureIntegrationMessageTypeEnum.MESSAGE_TYPE_ERROR,
UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_CODE_500, UiIntegrationKeyConstants.UI_INTEGRATION_ERROR_TEXT_SERVICE_ERROR));
failureResponse(msgs, 500);
return null;
}
return UiIntegrationKeyConstants.INTEGRATION_DETAILS_REPORT_REPSONSE;
}
JSP:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib uri="/WEB-INF/integration.tld" prefix="integration" %>
<link rel="stylesheet" type="text/css" href='<integration:file name="integration.css" type="CSS" prefix="/esign/styles/"/>'/>
<script language="javascript" type="text/javascript" src="<integration:file name="integration.js" type="JS" prefix="/esign/scripts/integration/"/>">
</script>
<h1><center>Transaction Report Page</center></h1>
<br></br>
<c:forEach items="${intgList}" var="list">
<tr class="<%=count % 2 != 0 ? "odd" : "even" %>">
<td class="dataFieldCell1" align="center"><c:out value="${list.lob}" /></td>
<td class="dataFieldCell1" align="center"><c:out value="${list.insuredName}" /></td>
<td class="dataFieldCell1" align="center"><c:out value="${list.custPhone}" /></td>
<c:if test="${list.policyNbrLink eq true}">
<td class="dataFieldCell1" align="center"><a href='#x' style="text-decoration:none" onclick="locateFunc('viewESignPolicyDetails',
{'agencyCode':'${list.agencyCode}',
'policyNumber':'${list.policyNumber}',
'policyState':'${list.policyState}',
'esignIdentifier':'${list.esignId}',
'esignVendorIdentifier':'${list.esignVendorIdentifier}',
'transId':'${list.transId}',
'lob':'${list.lob}',
'customerName':'${list.insuredName}',
'customerPhone':'${list.custPhone}',
'customerEmail':'${list.custEmail}',
'cretedDate':'${list.createdDate}'}
)"><c:out value="${list.policyNumber}"/></a></td>
</c:if>
<c:if test="${list.policyNbrLink eq false}">
<td class="dataFieldCell1" align="center"><c:out value="${list.policyNumber}"/></td>
</c:if>
<td class="dataFieldCell1" align="center"><c:out value="${list.createdDate}" /></td>
<td class="dataFieldCellWrap" align="center"><c:out value="${list.custEmail}" /></td>
<td class="dataFieldCell1" align="center"><a href='#x' onclick="locateFunc('viewESignDetails',
{'url':'<integration:urlAction actionName="/integration/viewDetailsIntegration"><integration:urlParam key="esignIdentifier" value="${list.esignId}"/></integration:urlAction>',
'agencyCode':'${list.agencyCode}',
'policyNumber':'${list.policyNumber}',
'policyState':'${list.policyState}',
'esignIdentifier':'${list.esignId}',
'esignVendorIdentifier':'${list.esignVendorIdentifier}',
'lob':'${list.lob}',
'transId':'${list.transId}',
'customerName':'${list.insuredName}',
'customerPhone':'${list.custPhone}',
'customerEmail':'${list.custEmail}',
'cretedDate':'${list.createdDate}'}
)"><c:out value="${list.esignNumDocs}"/></a></td>
</tr>
<%count++;%>
</c:forEach>
Struts.xml
<action name="*Integration" method="{1}" class="classPath">
<result name="success" type="tiles">integrationView</result>
<result name="integrationDetailsReportResponse" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="integrationReportDetailsView.csv"</param>
<param name="bufferSize">1024</param>
</result>
</action>
有一些類似的問題,但是它們令人困惑,我無法將它們與我的需求聯系起來,所以請不要重復。
也許我誤會了,但是您試圖做的事情是不可能的。
您將fileName.jsp放入InputStream並下載為integrationReportDetailsView.csv? 當然,您無法獲得jsp的動態內容,例如,您所做的類似於使用FTP服務器下載文件。
當您發出請求但未調用jsp時,服務器會創建jsp的動態內容,而您正在調用的操作是下載文件的二進制數據並將其作為附件發送。 服務器從不處理它,因此不會評估jsp標記,也不會創建動態內容。
我不知道為什么沒人回答這個問題,我認為這個問題並不難。 因此,為了將動態數據從JSP
轉換為CSV
文件格式,我們需要將Java Object
Serialize
CSV
格式。 有一些libraries
可用於實現此目標。 我使用了OpenSCV
並將POJO
傳遞給它。 現在,當我單擊按鈕時,不僅可以下載文件,而且還可以將數據從JSP
轉換為CSV
。 我所缺少的是對象的Serializing
部分。
此鏈接可能會對某人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.