如何动态地参数化portlet?

时间:2011-10-04 12:43:33

标签: parameters liferay portlet portal liferay-6

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

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

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

3 个答案:

答案 0 :(得分:2)

要加载不同的参数(在Liferay中作为“Portlet首选项”更为人所知),您可以使用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();

答案 1 :(得分:1)

“Liferay嵌入portlet”对我要解释的问题进行了很好的基本搜索(但对我来说并不完全清楚)。

有了这个,我发现像Embedding portlets in your portlet和。{ 似乎匹配的Embedding Portlets in Web Content

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

答案 2 :(得分:0)

您可以使用网址参数。

我将描述两种方法。

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