【问题标题】:How to parametrize portlets on the fly?如何动态参数化portlet?
【发布时间】:2011-10-04 12:43:33
【问题描述】:

Portlets have 编辑模式,这是我们可以参数化它们的方式。

我的问题是,在 portlet 加载时以编程方式对其进行参数化的最佳方法是什么。

例如:我想让 Liferay 加载两个具有特定 ID 的 portlet 实例,一个是 paramA,第二个是 paramB

【问题讨论】:

  • 我总是使用以下两种方法之一:所有 portlet 实例都可以具有 same 默认首选项值(当我查看是否保存了某些首选项并使用默认首选项时如果没有),或者我将实例添加到门户并使用编辑模式对其进行配置。您的想法具有一定的创造力是可行的,但我建议您发布您正在尝试解决的真正的高层次问题,因为您的想法似乎有点奇怪和冒险。
  • @brandizzi - 想象一下任何处理任何同质数据的数据查看器。例如,用户卡。尝试将此类查看器实现为参数化的 portlet 似乎非常合乎逻辑。
  • 抱歉,我无法理解您的评论。这些用户卡是什么?从哪里检索到这些同质数据?
  • @brandizzi,用户卡只是示例。在我链接的问题中,还有另一个示例 - 想象一下地图 portlet,它可以以一些预定义的值为中心。

标签: parameters liferay portlet portal liferay-6


【解决方案1】:

要加载不同的参数(在 Liferay 中称为“Portlet Preferences”),您可以使用PortletPreferences 来存储和检索不同的参数,

PortletPreferences preferences =
    PortletPreferencesFactoryUtil.getPortletSetup(
        request, portletId);

factory 有 2 个参数,

  • 请求 - 请求。
  • PortletId - 您的 Portlet 的 ID,(例如“name_WAR_myportlet_INSTANCE_ABCD”)。

通过这个对象可以获取参数:

String myValue = preferences.getValue("my-value");

你可以存储值:

preferences.setValue("my-value", "this-value");
preferences.store();

【讨论】:

    【解决方案2】:

    “Liferay embed portlets”提供了一个很好的基本搜索,我解释了您要询问的问题(但我并不完全清楚)。

    有了这个我发现像Embedding portlets in your portletEmbedding Portlets in Web Content 似乎匹配。

    如果不是我第二个 Brandizzi 的评论:请给出高级问题(您需要在业务方面解决)而不是建议的解决方案(您需要技术细节,即使它是一个糟糕的解决方案原来的问题)

    【讨论】:

      【解决方案3】:

      你可以使用url参数。

      我将描述两种方法。

      1) 为每个 portlet 使用不同的参数,但您必须为每个 portlet(portlet 首选项)配置要查找的参数名称(每个 portlet 不同)。

      final String parameter = p_request.getPreferences().getValue("parameterName", null));
      
      javax.servlet.http.HttpServletRequest request = com.liferay.portal.util.PortalUtil.getOriginalServletRequest(com.liferay.portal.util.PortalUtil.getHttpServletRequest(p_request));
      final String paramValue = request.getParameter(parameter);
      


      用法示例:http://www.myserver.com/mypagewithportlets?param1=something1&param2=somethnig2


      2)使用带有portlet命名空间前缀的参数,但是使用参数时需要知道portlet id(napespace是portlet id,前缀=suffix=_)

      javax.servlet.http.HttpServletRequest request = com.liferay.portal.util.PortalUtil.getOriginalServletRequest(com.liferay.portal.util.PortalUtil.getHttpServletRequest(p_request));
      final String paramValue = request.getParameter(p_response.getNamespace() + "myparameter");
      


      用法示例:http://www.myserver.com/mypagewithportlets?_name_WAR_myportlet_INSTANCE_xzy1_myparameter=something1&_name_WAR_myportlet_INSTANCE_syhs_myparameter=somethnig2


      只是一个注释
      p_request 实现 javax.portlet.PortletRequest
      p_response 实现 javax.portlet.PortletResponse

      【讨论】:

        猜你喜欢
        • 2016-08-20
        • 2021-07-08
        • 2012-09-07
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 2011-09-22
        • 2017-01-14
        • 1970-01-01
        相关资源
        最近更新 更多