Portlet有一个 EDIT 模式,这是我们可以参数化它们的方式。
我的问题是以编程方式在加载时准确参数化portlet 的最佳方法是什么。
例如:我想让 Liferay 加载两个具有特定 ID 的 portlet 实例,一个带有paramA
,第二个带有paramB
。
要加载不同的参数(在 Liferay 中称为“Portlet Preferences”),您可以使用 PortletPreferences来存储和检索不同的参数,
PortletPreferences preferences =
PortletPreferencesFactoryUtil.getPortletSetup(
request, portletId);
工厂采用2个参数,
使用此对象,您可以获取参数:
String myValue = preferences.getValue("my-value");
您可以存储值:
preferences.setValue("my-value", "this-value");
preferences.store();
“Liferay embed portlets”对我解释您要询问的问题进行了很好的基本搜索(但我并不完全清楚)。
有了这个,我发现像在您的 portlet 中嵌入 portlet和 在 Web 内容中嵌入 portlet 之类的点击似乎很匹配。
如果不是我第二个brandizzi的评论:请给出高级问题(您需要用业务术语解决)而不是建议的解决方案(您需要技术细节,即使它对原始问题的解决方案不好)
您可以使用 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");
只是说明
p_request 实现 javax.portlet.PortletRequest
p_response 实现 javax.portlet.PortletResponse