2

我为 Liferay 6 开发了一个自定义 portlet。

单击链接应打开弹出窗口以打开/保存使用 Jasper Reports 生成的 pdf 文件。

我使用response.setContentType ("application/pdf"),其中响应为RenderResponse

但它返回以下错误:

错误 java.lang.IllegalArgumentException: application / pdf is not a supported mime type at com.liferay.portlet.MimeResponseImpl.setContentType (MimeResponseImpl.java: 159).......

我也尝试在文件中添加标签portlet.xml

<supports>
    <mime-type> application/pdf </mime-type>
    <portlet-mode> view </portlet-mode>
</supports>

但我总是遇到同样的错误。

你有什么建议吗?

4

2 回答 2

0

您应该使用public void serveResource(ResourceRequest req, ResourceResponse res)jsr-286 中的方法并res.setContentType("application/pdf")在此方法中使用;

于 2013-06-02T19:32:11.377 回答
0

根据 Portlet 2.0(Liferay-6 支持),我们有 2 个新的 portlet 阶段:ResourceEvent.

资源服务阶段对于在 portlet 中执行 ajax 内容和下载服务资源(如图像/文档/pdf/文件等)很有用。

因此,就像您创建一个renderURL( <portlet:renderURL />or renderResponse.createRenderURL()) 来调用 portlet 的renderordoView方法一样,您需要创建一个resourceURL( <portlet:resourceURL />or renderResponse.createResourceURL()) 来调用serveResourceportlet 的方法。

并且在您的serveResource方法中,您可以编写您在渲染方法中编写的当前代码(可能需要进行一些修改)以下载 pdf。

有关完整示例,您可以下载Portlets in Action第 12 章的源代码,并参考名为ch12_BookCatalogResourceURL的项目。

于 2013-07-26T14:39:28.270 回答