1

Portlet一个 EDIT 模式,这是我们可以参数化它们的方式。

我的问题是以编程方式在加载时准确参数化portlet 的最佳方法是什么。

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

4

3 回答 3

2

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

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

工厂采用2个参数,

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

使用此对象,您可以获取参数:

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

您可以存储值:

preferences.setValue("my-value", "this-value");
preferences.store();
于 2011-10-04T22:41:50.940 回答
1

“Liferay embed portlets”对我解释您要询问的问题进行了很好的基本搜索(但我并不完全清楚)。

有了这个,我发现像在您的 portlet 中嵌入 portlet和 在 Web 内容中嵌入 portlet 之类的点击似乎很匹配。

如果不是我第二个brandizzi的评论:请给出高级问题(您需要用业务术语解决)而不是建议的解决方案(您需要技术细节,即使它对原始问题的解决方案不好)

于 2011-10-05T08:07:10.400 回答
0

您可以使用 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¶m2=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

于 2011-10-06T11:49:08.697 回答