Liferay研究之廿四:如何实现配置模式

本文解析了Liferay中PortletConfiguration页面的工作原理,详细介绍了如何通过portlet的配置信息(Liferay-portlet.xml)实现定制化的portlet配置界面,并探讨了默认配置页面中Tab页的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Liferay的Portlet Configuration页面,都有几个固定的Tab页,比如“权限”,“导出导入”等,这些是在什么地方定义的呢?

我们知道,portal/render_portlet.jsp负责界面上一个portlet的解析功能,包括这个portlet再编辑模式下的最大、最小、配置、外观等MODE的实现。
仔细分析一下这个页面,点击一个portlet的configuration按钮时,执行的逻辑如下:

if (Validator.isNotNull(portlet.getConfigurationActionClass())) {
 urlConfiguration.setParameter("struts_action", "/portlet_configuration/edit_configuration");
}
else {
 urlConfiguration.setParameter("struts_action", "/portlet_configuration/edit_permissions");
}


就是如果再portlet的配置信息中(Liferay-portlet.xml)中包含了configuration的信息,那么就执行edit_configuration action, 也就是再配置页面中包含客户化的portlet配置信息的页面(configuration.jsp),具体如何实现,我们稍后分析。如果没有客户化的信息需要定制,那么,我们就可以通过一个标准的配置实现edit_permissions来实现。这里面只有权限、导入导出等通用的设置功能。

再Portlet Configuration这个Portlet下,如何调用其他Portlet的Configuration.jsp, 这个就需要查看EditConfigurationAction里定义了。代码如下:

try {
 portlet = getPortlet(req);
}
catch (PrincipalException pe) {
}

ConfigurationAction configurationAction = getConfigurationAction(portlet);

if (configurationAction != null) {
 configurationAction.processAction(config, req, res);
}


看到了吧,这里首先获取是对哪个Portlet进行Config的,获取其ConfigurationAction(统一的Interface),然后调用其processAction方法。

而在显示jsp页面时,根据定义执行了edit_configuration.jsp,分析其源码可以知道,这个页面引入了tab1.jsp, tab2.jsp两个页面。

<liferay-util:include page="/html/portlet/portlet_configuration/tabs1.jsp">
 <liferay-util:param name="tabs1" value="setup" />
</liferay-util:include>


默认的tab选项是setup页,也就是你编写的configuration.jsp所在的那个tab。在tab2.jsp中对这个Tab进行了详细的定义:

// Configuration
PortletURL configurationURL = renderResponse.createRenderURL();

configurationURL.setWindowState(WindowState.MAXIMIZED);

configurationURL.setParameter("struts_action", "/portlet_configuration/edit_configuration");
configurationURL.setParameter("redirect", redirect);
configurationURL.setParameter("returnToFullPageURL", returnToFullPageURL);
configurationURL.setParameter("portletResource", portletResource);
configurationURL.setParameter("previewWidth", previewWidth);


注意:上面的portletResource就是你自己的Portlet的portletId,通过这个portletId才能让EditConfigurationAction获知这个被配置的Portlet的ConfigurationActionClass.

 <liferay-ui:tabs
 names="current,archived"
 param="tabs2"
 url0="<%= configurationURL.toString() %>"
 url1="<%= archivedSetupsURL.toString() %>"
/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值