Portlets have编辑模式,这是我们可以参数化的方式。
我的问题是什么是以编程方式在加载时准确地参数化portlet的最佳方法。
例如:我想让Liferay加载两个具有特定ID的portlet实例,一个带paramA
,第二个带paramB
。
答案 0 :(得分:2)
要加载不同的参数(在Liferay中作为“Portlet首选项”更为人所知),您可以使用PortletPreferences来存储和检索不同的参数,
PortletPreferences preferences =
PortletPreferencesFactoryUtil.getPortletSetup(
request, portletId);
factory需要2个参数,
使用此对象,您可以获取参数:
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¶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