我为Liferay 6开发了一个自定义portlet。
单击链接应打开弹出窗口以打开/保存使用Jasper Reports生成的pdf文件。
我使用response.setContentType ("application/pdf"
),其中响应为RenderResponse
。
但它返回以下错误:
错误java.lang.IllegalArgumentException:application / pdf不是受支持的mime类型 at com.liferay.portlet.MimeResponseImpl.setContentType(MimeResponseImpl.java:159)........
我还尝试在文件portlet.xml
<supports>
<mime-type> application/pdf </mime-type>
<portlet-mode> view </portlet-mode>
</supports>
但我总是得到同样的错误。
你有什么建议吗?
答案 0 :(得分:0)
您应该在jsr-286中使用public void serveResource(ResourceRequest req, ResourceResponse res)
方法并在此方法中使用res.setContentType("application/pdf")
;
答案 1 :(得分:0)
根据Portlet 2.0(Liferay-6支持),我们有2个新的portlet阶段:Resource
和Event
。
资源服务阶段对于在portlet中执行ajax和下载即图像/文档/ pdf /文件等服务资源非常有用。
就像您创建renderURL
(<portlet:renderURL />
或renderResponse.createRenderURL()
)来调用portlet的render
或doView
方法一样,您需要创建resourceURL
(<portlet:resourceURL />
或renderResponse.createResourceURL()
)来调用portlet的serveResource
方法。
在您的serveResource
方法中,您可以编写您在渲染方法中编写的代码(可能需要进行一些修改)以下载pdf。
有关完整示例,您可以为source-code第12章下载此Portlets in Action,并参考名为 ch12_BookCatalogResourceURL 的项目。