Portlet:转发资源请求以显示完整的门户

2024-03-28

我的目的是处理一个为资源提供服务的 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

这是一个有效的示例,其功能与我想要实现的目标类似。我使用实用程序类SessionErrorsLiferay 的: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


以下是使用 Servlet Forward 的尝试,它似乎有效。不过,我认为这是针对 portlet 规范中未提供的功能的一种解决方法:

public class ResourceRequestForwardPortlet extends GenericPortlet {

    public void serveResource(ResourceRequest request, ResourceResponse response)
        throws PortletException, IOException {

        HttpServletRequest request = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(portletRequest));
        PortletURL renderURL = portletResponse.createRenderURL();
        try {
            request.setAttribute("error", errorText);

            String forwardURL = renderURL.toString().replace("http://localhost:8080", "");//The generation of the forwardURL could be done nicer
            RequestDispatcher rd = request.getRequestDispatcher(forwardURL);
            rd.forward(request, PortalUtil.getHttpServletResponse(portletResponse));
        } catch (ServletException e) {
            throw new 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Portlet:转发资源请求以显示完整的门户 的相关文章

  • 如何在 Liferay portlet 中设置 Cookie?

    我在尝试设置会话 cookie 时遇到问题Liferay 6 0 portlet 我希望能够向客户端浏览器设置一个 cookie 以存储用于 linkedin 身份验证的应用程序密钥 然后其他 portlet 可以在其中检索它 我可以使用以
  • Liferay portlet:从 javascript 重定向到其他 jsp 页面

    我想从 js 重定向到 liferay portlet 中的另一个 jsp 页面 我发现的想法是使用 renderurl 我发现可以帮助我迈出第一步的最佳代码是 a href This render URL link is created
  • Liferay Portal-ext.properties 去哪里了?

    下面是我的文件夹层次结构 Portal ext properties 去哪里了 C glassfish3 glassfish domains domain1 applications liferay Thanks 您可以将其放在 lifer
  • 在多个 portlet 之间共享的 Singleton 类

    我在 Liferay 应用程序中有几个 Singleton 类 它们包含多个配置参数和一个 ServiceLocator 其中包含我需要使用的 WebServices 实例 我已将这些类放入一个 jar 中 该 jar 被声明为对我的所有
  • 修复翻译错误

    liferay 门户中有很多地方翻译成我的语言 sk SK 是错误的 是否可以用 hook 重写那些不好的翻译 任何其他想法都欢迎 多谢 是的 你可以做到 in your liferay hook xml文件添加要覆盖的语言文件的条目 就像
  • 如何在 Liferay 中检索用户个人资料图片

    我想检索用户个人资料图片 我该怎么做 您能分享一下代码片段吗 我使用 Liferay 6 0 6 它只有 user getPortraitId 而没有 user getPortraitURL 那么一旦我在 JAVA 类中获得了肖像 id 我
  • Eclipse 中的 Liferay 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 覆盖 Liferay 启动事件

    我有一个关于 Liferay 启动事件的问题 Liferay 文档中给出 启动活动 输入扩展的逗号分隔类名列表com liferay portal struts SimpleAction 这些类将在指定事件中运行 有人可以告诉我两者之间有什
  • 为什么我在 liferay 中收到 NullPointerException?

    我得到了NullPointerException在下面一行 originalStrutsPortletAction processAction originalStrutsPortletAction portletConfig action
  • 创建 Liferay portlet 配置页面

    我正在尝试为 Liferay portlet 创建一个配置页面 以便我可以为其设置一些参数 例如 我想选择控制器在查看时应显示哪个页面 配置应位于此处 所以我为配置创建了一个控制器 如下所示 import com liferay porta
  • 在 Plone 中针对特定内容类型自定义搜索 portlet

    我在网站的某些区域使用搜索 portlet 但我想将结果限制为仅搜索特定内容类型 例如仅搜索新闻项目 或仅显示教职员工目录个人资料 我知道你可以在到达后执行此操作 search通过该 过滤器 列表形成 但有没有办法从过滤器开始 以便 实时搜
  • 如何在 Liferay 中获取全局(公司)组 ID?

    如何在不访问的情况下获取Liferay中的全局 公司 组IDThemeDisplay PS 与ThemeDisplay很简单 themeDisplay getCompanyGroupId 当你只有一个时Company在您的门户中 Compa
  • 我可以使用 Liferay 6.1.0 中的 Kaleo 和其他 portlet吗?在6.1.1版本中?

    我可以使用 Liferay 6 1 0 中的 Kaleo 和其他 portlet吗 在6 1 1版本中 我尝试将kaleo放入6 1 1版本的webapps和deploy目录中 但没有任何反应 我是否需要将 portlet 修改为新规范 对
  • 在 Liferay 中控制 Portlet 的大小

    我有一个简单的 Vaadin portlet 它显示嵌入式页面 例如 www stackoverflow com 在 Liferay 中 我将 portlet 所在的页面布局设置为 1 列布局 以便 portlet 填满整个页面 现在 如果
  • Liferay主题中包含jQuery和其他JS文件

    我使用 Liferay 6 1 并创建了我的主题 sample theme 我想添加jQuery 我怎样才能做到这一点 为什么我有文件夹 sample theme and liferay work两者都有文件夹 css js 模板 我创建了
  • 将变量传递给jsp

    我有一个java类 public void doView RenderRequest renderRequest RenderResponse renderResponse throws IOException PortletExcepti
  • Liferay DLFileEntryLocalServiceUtil.addFileEntry 不创建 AssetEntry 记录

    我有一个自定义 portlet 它提供了一个用户可以上传文件的表单 上传的文件应存储在文档和媒体 Portlet 中 我正在使用创建文件条目DLFileEntryLocalServiceUtil addFileEntry 文件上传成功 记录
  • liferay 7 中 liferay-portlet.xml 的等效文件是什么?

    我想在 liferay 7 中添加自定义用户通知 为此 如果我使用 liferay 6 2 我必须输入类似用户通知定义 and 用户通知处理程序类在 liferay portlet xml 中 但在liferay中我想问一下把这些条目放在哪
  • Hibernate:未配置 CurrentSessionContext

    我不断收到 Hibernate异常 否 CurrentSessionContext已配置 在我的代码中 其他搜索返回的唯一信息是罪魁祸首是
  • Liferay ajax 请求和 JSON 响应

    我是 Liferay 的新人 我使用服务生成器来创建数据库 我手动填充它们 最终我可以使用 JSP 调用它们PersonLocalServiceUtil class 现在我想在我的程序中使用Ajax 例如 有属性的人personID per

随机推荐

  • 如何使用flask-ReSTplus记录帖子正文?

    如何记录预期发布的输入正文value字段出现以便用户知道要发布什么 目前使用以下数据 customer id service id customer name site name service type 我们可以使用上面的 json 来默
  • 将同步代码包装为异步任务的最佳方法是什么?

    我正在实现一个异步接口方法 返回任务 然而 我的实现必然是同步的 最好的方法是什么 有一些内置的方法可以做到这一点吗 以下是我正在考虑的几个选项 选项 1 Task FromResult return Task FromResult Com
  • 如何轮询目录以检查是否添加了新文件?

    我想轮询一个目录以检查是否有新文件添加到该目录中 如果添加了任何新文件 我想读取该文件 有人可以告诉我如何做到这一点吗 Java 7 有一个文件观察器API http java dzone com news how watch file s
  • 将 datetimeoffset 数据类型与 jTDS 结合使用

    jTDS 目前不支持datetimeoffsetSQL Server 2008 中引入的数据类型 任何人都可以建议是否有办法使用datetimeoffset使用 jTDS 键入 正如在 下层客户端的向后兼容性 部分中提到的日期时间偏移文档
  • Protobuf.net“一旦生成序列化器,就无法更改类型”

    我有一些使用 Protobuf net 的相当简单的代码 它抛出了一个非常奇怪的异常 在 MetaType cs 的第 167 行中 它抛出 InvalidOperationException 一旦生成序列化程序 就无法更改类型 这是什么意
  • 单击按钮时切换弹出模式

    我在页面上显示包含多个项目的弹出窗口时遇到问题 本质上 它是页面下方项目的垂直 列表 到目前为止我有两个 当我单击第一个项目时 第一组信息会正确显示 但是当我单击第二个项目时 它会在弹出窗口中显示第一组信息 任何帮助表示赞赏 谢谢 docu
  • AVFoundation 点击​​聚焦反馈矩形

    我正在开发一个 iPhone 应用程序 我直接使用 AVFoundation 通过相机捕获视频 我已经实现了一项功能来启用tap to focus为用户提供的功能 void focus CGPoint aPoint if HAS AVFF
  • 使用 webpack 和 React 模块解析失败,即使使用 babel-loader

    我正在尝试将 webpack 与 React 一起使用 但收到此错误 app main js 中出现错误 Module parse failed Users me app main js Line 2 Unexpected token Yo
  • gcc 警告:标量初始值设定项周围有大括号

    我有如下定义的查找表 并且正在使用 GCC 当我编译时 我收到警告 warning braces around scalar initializer 这个警告是什么意思 我应该如何初始化这个LUT 我在初始化这个结构时犯了错误吗 Help
  • 如何在 Google Colaboratory 的 Jupyter Notebook 中安装 svmutil?

    我想使用 svmutil 函数https github com Netflix vmaf tree master libsvm python https github com Netflix vmaf tree master libsvm
  • 为整个 iOS 应用程序快速使用自定义字体

    我知道要在屏幕上设置元素的自定义字体我可以简单地执行以下操作someLabel font UIFont name Exo 2 0 size 15 我想知道如何使用 swift 为整个应用程序设置它 一种黑客方法是对应用程序的每个元素执行我所
  • FLTK简单动画

    我可以成功编译并运行 Hello World 代码 现在我想做一些像动画这样的事情 我首先创建一个矩形类来实现 Fl widget 中的 draw class myRect public Fl Widget private Fl Color
  • 有没有一种简单的方法将 C++ 枚举转换为字符串?

    假设我们有一些命名枚举 enum MyEnum FOO BAR 0x50 我在谷歌上搜索的是一个脚本 任何语言 它扫描我的项目中的所有标头并生成每个枚举具有一个函数的标头 char enum to string MyEnum t 以及类似这
  • 如何使引导图标与标签中的文本内联显示?

    我有显示文本和箭头的引导导航药丸 不幸的是 如果文本太长 箭头就会出现在锚点的边框上 Html 看起来像这样 a href span Some longer sample text span i class pull right icon
  • Pandas 根据有时相反的两列删除重复项

    我有一个 DF 看起来像 c1 c2 c3 1 A B x 2 A C y 3 B A x 4 B D z 5 A B y 正如你所看到的 如果我们忽略这一点 第 1 行和第 3 行就会重复c1 and c2是不同的列 或者如果它们颠倒了
  • 如何避免 Go 中的初始化循环

    当我尝试编译这段代码时 package main import encoding json fmt net http func main fmt Println Hello playground const GET GET POST POS
  • 如何为表达式添加括号?

    我有一个想法 可以制作一个简单的程序 它将帮助我处理 C 等语言中的运算符优先级 其中最困难的部分是为表达式加上括号 例如 我想要这个 a x b x 转换成这样 a x b x 我在以下步骤中手动完成 a x b x a x b x a
  • PowerShell 类方法的引用参数? [参考][Uint64]

    我有一个 powershell 类 我需要传递对 UInt64 变量的引用并从方法返回一个值 我正在尝试执行类似于下面代码的操作 但它给了我一个语法错误 也许我不需要添加 参考 因为所有变量在 powershell 中默认都是引用 包括 u
  • Python 中的 __new__ 和 __init__

    我正在学习 Python 到目前为止我可以讲述以下内容 new and init new 用于对象创建 init 用于对象初始化 new 之前被调用 init as new 返回一个新实例并且 init 之后调用以初始化内部状态 new 对
  • Portlet:转发资源请求以显示完整的门户

    我的目的是处理一个为资源提供服务的 ResourceRequest 动态生成的 PDF 如果生成此文件时出现问题 则应呈现 portlet 中带有失败消息的整个门户 是否可以将 ResourceRequest 转发到呈现完整门户的请求 我也