(免责声明:我是portlet开发的新手)
我创建了portlet(在liferay中)来提供文件。但是用户首先需要填写小表格(名称等),然后点击“保存”后我把数据做数据库,并且应该提供文件供下载。
我知道如何使用以下方式提供文件:
@Override
public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse)
并通过操作保存数据:
@ProcessAction(name = "save")
public void save(ActionRequest actionRequest, ActionResponse actionResponse)
但是不知道如何将server.transfer从一个转移到另一个。我不能只打电话:
serveResource(actionRequest, actionResponse);
因为参数不兼容。
同样出错我应该这样做:
PortalUtil.copyRequestParameters(actionRequest, actionResponse);
actionResponse.setRenderParameter("mvcPath", "/myForm.jsp");
不适用于resourceRequest / resourceResponse ...
portlet中这种重定向的正确/优雅方式是什么?
答案 0 :(得分:0)
为此,您必须通过resourceUrl使用ajax提交表单。 在serveResource方法中写下以下代码来下载文件。
PortletResponseUtil.sendFile(resourceRequest, resourceResponse,
fileName, bytes, contentType);
答案 1 :(得分:0)
对于保存表单而不是使用processAction,您可以直接调用serveResource并从serve方法本身保存表单和服务文件。
您也可以帮助Ajax请求提交表单。
<form action="<portlet:resourceURL/>" method="POST">
...
</form>
@Override public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse){ //Save_form if(success){ //serveFile String documentPath = document.getDocumentPath(); File file = getFile(documentPath); String contentType = MimeTypesUtil.getContentType(file); long contentLength = file.length(); is = new FileInputStream(file); ServletResponseUtil.sendFile( request, response, document.getDocumentName(), is, contentLength, contentType, HttpHeaders.CONTENT_DISPOSITION_INLINE); }else{ response.getOutputStream("Error submitting form"); response.getOutputStream().flush(); } }