Liferay Portlet:转发ResourceRequest以显示完整门户

Liferay Portlet:转发ResourceRequest以显示完整门户,liferay,portlet,Liferay,Portlet,我的意图是处理一个为资源服务的ResourceRequest(一个动态生成的PDF)。如果生成此文件时出错,则应呈现portlet中包含失败消息的整个门户 是否可以将ResourceRequest转发到呈现完整门户的请求?我也在考虑重定向,但我希望能够传递一些属性/参数 我希望我把我的问题解释得足够清楚。多谢各位 相关/重复: 例子 这是一个与我想要达到的效果类似的例子。我使用Liferay的实用程序类SessionErrors:在会话中保存对象并重定向到渲染URL。doView()方法在后续请

我的意图是处理一个为资源服务的ResourceRequest(一个动态生成的PDF)。如果生成此文件时出错,则应呈现portlet中包含失败消息的整个门户

是否可以将ResourceRequest转发到呈现完整门户的请求?我也在考虑重定向,但我希望能够传递一些属性/参数

我希望我把我的问题解释得足够清楚。多谢各位

相关/重复:

例子 这是一个与我想要达到的效果类似的例子。我使用Liferay的实用程序类
SessionErrors
:在会话中保存对象并重定向到渲染URL。
doView()
方法在后续请求期间被调用,可以读取会话中保存的内容

import com.liferay.portal.kernel.servlet.SessionErrors;
导入javax.portlet.GenericPortlet;
导入javax.portlet.RenderRequest;
导入javax.portlet.RenderResponse;
导入javax.portlet.ResourceRequest;
导入javax.portlet.ResourceResponse;
导入javax.portlet.PortletException;
导入javax.portlet.PortletException;
导入javax.portlet.PortletRequestDispatcher;
公共类ResourceRequestForwardPortlet扩展了GenericPortlet{
public void服务器资源(ResourceRequest请求、ResourceResponse响应)
抛出PortletException,IOException{
添加(resourceRequest,“resourceRequest.error”,“error”+errorText);
setProperty(resourceResponse.HTTP_状态_代码,“302”);
resourceResponse.addProperty(“位置”,resourceResponse.createRenderURL().toString());
}
public void doView(RenderRequest RenderRequest,RenderResponse RenderResponse)
抛出IOException、PortletException{
字符串错误=(字符串)SessionErrors.get(renderRequest,“resourcerequest.error”);
SessionErrors.clear(渲染请求);
setAttribute(“errorMsg”,error);
PortletRequestDispatcher PortletRequestDispatcher=getPortletContext().getRequestDispatcher(“view.jsp”);
包括(viewTemplate、renderRequest、renderResponse);
portletRequestDispatcher.include(renderRequest、renderResponse);
}
}
我想要实现的是相同的,但是阻止浏览器执行两个请求。为此,我想做一个转发,并将错误消息作为请求属性写入

我将带有此示例的项目上载到GitHub:
下面是一个使用servlet转发的尝试,它似乎可以工作。尽管如此,我认为这是portlet规范中不存在的特性的一种变通方法:

公共类ResourceRequestForwardPortlet扩展了GenericPortlet{
public void服务器资源(ResourceRequest请求、ResourceResponse响应)
抛出PortletException,IOException{
HttpServletRequest=PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(portletRequest));
PortletURL renderURL=portletResponse.createRenderURL();
试一试{
setAttribute(“错误”,errorText);
String forwardURL=renderURL.toString().replace(“http://localhost:8080“,”);//forwardURL的生成可以做得更好
RequestDispatcher rd=request.getRequestDispatcher(forwardURL);
转发(请求,portal.getHttpServletResponse(portletResponse));
}捕获(ServletException e){
抛出新的PortletException(e);
}
}
}
除此之外,当发生转发时,Liferay会在控制台上显示一条警告:

14:33:51,048 WARN  [http-apr-8080-exec-112][code_jsp:128] {code="404", msg="/poc-forward-portlet/web/guest/home", uri=/web/guest/home}
X-Requested-With null

你找到解决办法了吗?什么都没有。我认为我们使用了一种变通方法,发送ActionRequest,如果成功,显示的页面将触发Javascript下载。
ResourceRequest
主要用于ajax。因此,刷新整个门户不是
ResourceRequest
的工作,如果您希望这样做,那么您最多可以通过ajax在portlet中显示一条失败消息。或者,您可以通过javascript.OK返回一些标志来触发整个门户的刷新,但是如果ResourceRequest仅用于Ajax,是否有其他方法可以从portlet生成动态下载?-->能否使用ResourceResponse.createRenderUrl()方法并传入一个将映射到渲染方法的url?