我們知道,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() %>"
/>