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();
}
}
(免责声明:我是 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(); } }