我的目的是处理一个为资源提供服务的 ResourceRequest(动态生成的 PDF)。如果生成此文件时出现问题,则应呈现 portlet 中带有失败消息的整个门户。
是否可以将 ResourceRequest 转发到呈现完整门户的请求?我也在考虑重定向,但我希望能够传递一些属性/参数。
我希望我足够清楚地解释了我的问题。谢谢。
相关/重复:如何使ResourceResponse将请求转发到liferay portlet中的错误页面 https://stackoverflow.com/questions/17870593/how-to-make-the-resourceresponse-to-forward-the-request-to-error-page-in-liferay
Example
这是一个有效的示例,其功能与我想要实现的目标类似。我使用实用程序类SessionErrors
Liferay 的:serveResource()
在会话中保存一个对象并重定向到渲染 URL。这doView()
方法在后续请求时被调用,可以读取session中保存的内容。
import com.liferay.portal.kernel.servlet.SessionErrors;
import javax.portlet.GenericPortlet;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
public class ResourceRequestForwardPortlet extends GenericPortlet {
public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {
SessionErrors.add(resourceRequest, "resourcerequest.error", "ERROR " + errorText);
resourceResponse.setProperty(ResourceResponse.HTTP_STATUS_CODE, "302");
resourceResponse.addProperty("Location", resourceResponse.createRenderURL().toString());
}
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
String error = (String)SessionErrors.get(renderRequest, "resourcerequest.error");
SessionErrors.clear(renderRequest);
renderRequest.setAttribute("errorMsg", error);
PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher("view.jsp");
include(viewTemplate, renderRequest, renderResponse);
portletRequestDispatcher.include(renderRequest, renderResponse);
}
}
我想要实现的目标是相同的,但阻止浏览器执行两个请求。为此,我想进行转发,并且应该将错误消息写入请求属性。
我将包含此示例的项目上传到 GitHub:https://github.com/adrianrm/poc-forward-portlet/tree/master/src/main/java/arm/requestforward https://github.com/adrianrm/poc-forward-portlet/tree/master/src/main/java/arm/requestforward