Spring mvc 在SpringPortlet MVC体系结构中提供PDF-Liferay 6.0.6
我正在寻找通过Liferay Portal将PDF(直接显示)文件发送到浏览器的方法。找到了许多解决方案——最流行的是编写一个Servlet来完成这项工作。我已经阅读了JSR286规范中的Portlet资源服务,有人能为Spring3.0Portlet MVC详细介绍一下吗Spring mvc 在SpringPortlet MVC体系结构中提供PDF-Liferay 6.0.6,spring-mvc,liferay,liferay-6,portal,spring-portlet-mvc,Spring Mvc,Liferay,Liferay 6,Portal,Spring Portlet Mvc,我正在寻找通过Liferay Portal将PDF(直接显示)文件发送到浏览器的方法。找到了许多解决方案——最流行的是编写一个Servlet来完成这项工作。我已经阅读了JSR286规范中的Portlet资源服务,有人能为Spring3.0Portlet MVC详细介绍一下吗 <servlet> <display-name>DownloadServlet</display-name> <servlet-name>DownloadSer
<servlet>
<display-name>DownloadServlet</display-name>
<servlet-name>DownloadServlet</servlet-name>
<servlet-class>com.liferay.portal.pdf.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/DownloadServlet/*</url-pattern>
</servlet-mapping>
我在ServletPortlet映射上找不到任何东西。因此,我使用资源映射通过SpringPortletMVC使用注释发送pdf。 参考: 在JSP中:
<portlet:resourceURL var="PDFActionURL">
<portlet:param name="reportType" value="pdf" />
<portlet:param name="pdfNumber" value="${pdfNumber}" />
</portlet:resourceURL>
<input type="button" name="viewPDFButton" value="View PDF" onClick="self.location = '${PDFActionURL}';" />
编辑:如果您使用的是Liferay的早期版本,这是一篇通过Liferay实现文件下载/服务的好文章-在Spring控制器中映射请求映射URL的实际方法是使用portlet:resourceURL标记中的“id”属性,然后将其映射到控制器的@ResourceMapping属性中。应该将URL映射到方法。但是,如果您不介意自己进行比较和映射,那么上面的方法可以很好地工作。
<portlet:resourceURL var="PDFActionURL">
<portlet:param name="reportType" value="pdf" />
<portlet:param name="pdfNumber" value="${pdfNumber}" />
</portlet:resourceURL>
<input type="button" name="viewPDFButton" value="View PDF" onClick="self.location = '${PDFActionURL}';" />
<context:annotation-config />
<context:component-scan base-package="com.xxx" />
import java.io.IOException;
import java.io.OutputStream;
import javax.portlet.PortletException;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.bind.annotation.ResourceMapping;
import com.xxx.pdf.PDFBO;
import com.xxx.PDFDTO;
import com.liferay.portal.kernel.servlet.HttpHeaders;
import com.liferay.portal.kernel.util.ParamUtil;
@Controller("pdfController")
@RequestMapping(value = "view")
public class PDFController {
private final static Logger LOG = LoggerFactory.getLogger(PDFController.class);
//This is using Spring 3.0 Annotation Mapping (Spring Portlet MVC Architecture)
@ResourceMapping
public void serveResource(ResourceRequest resourceRequest, ResourceResponse res) throws PortletException, IOException {
LOG.info("In serveResource: ResourceURL");
String returnType = ParamUtil.getString(resourceRequest, "reportType");
String pdfNumber = ParamUtil.getString(resourceRequest, "pdfNumber");
LOG.info("returnType:" + returnType + " pdfNumber:" + pdfNumber);
String filename = "FILENAME_"+pdfNumber+".pdf";
// HttpServletRequest request =
// PortalUtil.getHttpServletRequest(resourceRequest);
if (returnType != null && returnType.equals("pdf")) {
try {
//GET YOUR PDF HERE
//PDFBO pdfBO = new PDFBO();
//PDFDTO pdfContentVO = null;
//pdfContentVO = pdfBO.getPDF(pdfNumber);
res.setContentType("application/pdf");
res.addProperty(HttpHeaders.CACHE_CONTROL, "max-age=3600, must-revalidate");
res.addProperty(HttpHeaders.CONTENT_DISPOSITION,"filename="+ filename);
//Use this to directly download the file
//res.addProperty(HttpHeaders.CONTENT_DISPOSITION,"attachment");
OutputStream out = res.getPortletOutputStream();
//out.write(pdfContentVO.getPdfData());
out.write(/*get pdf byte[] Array Here */);
out.flush();
out.close();
} catch (Exception e) {
LOG.info("Error in " + getClass().getName() + "\n" + e);
}
}
}
}