将动态数据从 JSP 页面导出到 Struts2 中的 CSV
Export dynamic data from a JSP page to CSV in Struts2
我正在尝试实现用户下载 CSV
格式文件的功能。我已经完成了下载部分,我能够将 JSP
格式转换为 CSV
格式,但我面临的问题是我无法将动态数据从 JSP
传输到CSV
文件。下载文件后,我看到 JSP tags
和它的所有其他内容,而不是我只想查看数据,而不是 JSP tags
或 forms
等
操作 Class:
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
文件格式,我们需要 Serialize
我们的 Java Object
转换为 CSV
格式。有一些 libraries
可以用来实现这个目标。我使用 OpenSCV
并将我的 POJO
传递给它。现在,当我单击按钮时,我不仅可以下载文件,还可以从 JSP
获取数据到 CSV
。我缺少的是对象的 Serializing
部分。
This link 可能会对某人有所帮助。
我正在尝试实现用户下载 CSV
格式文件的功能。我已经完成了下载部分,我能够将 JSP
格式转换为 CSV
格式,但我面临的问题是我无法将动态数据从 JSP
传输到CSV
文件。下载文件后,我看到 JSP tags
和它的所有其他内容,而不是我只想查看数据,而不是 JSP tags
或 forms
等
操作 Class:
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
文件格式,我们需要 Serialize
我们的 Java Object
转换为 CSV
格式。有一些 libraries
可以用来实现这个目标。我使用 OpenSCV
并将我的 POJO
传递给它。现在,当我单击按钮时,我不仅可以下载文件,还可以从 JSP
获取数据到 CSV
。我缺少的是对象的 Serializing
部分。
This link 可能会对某人有所帮助。