Java portlet:如何重定向(服务器端)到serveResource?

时间:2017-12-06 10:16:44

标签: java portlet liferay-7

(免责声明:我是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中这种重定向的正确/优雅方式是什么?

2 个答案:

答案 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();
  }   

}