Spring mvc 在SpringPortlet MVC体系结构中提供PDF-Liferay 6.0.6

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

我正在寻找通过Liferay Portal将PDF(直接显示)文件发送到浏览器的方法。找到了许多解决方案——最流行的是编写一个Servlet来完成这项工作。我已经阅读了JSR286规范中的Portlet资源服务,有人能为Spring3.0Portlet MVC详细介绍一下吗

<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);
            }
        }
    }
}