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

Java portlet: how to redirect (server side) to serveResource?

(免责声明:我是 portlet 开发的新手)

我创建了 portlet(在 liferay 中)来提供文件。但是用户首先需要填写小表格(姓名等),然后在单击 "save" 之后,我将数据放入数据库,并且应该提供文件供下载。

我知道如何使用以下文件提供文件:

@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 中这种重定向的 proper/elegant 方式是什么?

为此,您必须通过 resourceUrl 使用 ajax 提交表单。 在 serveResource 方法中写下代码来下载文件。

PortletResponseUtil.sendFile(resourceRequest, resourceResponse,
fileName, bytes, contentType);

要保存表单而不是使用 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();
  }   

}