Liferay研究之廿四:如何實現配置模式

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() %>"
/>

發佈了112 篇原創文章 · 獲贊 10 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章