標籤:傻傻 render 建立 後台 gre 語言 except 自己 XML
在liferay7中把portlet中的控制層拆成了3個部分:
1.MVCActionCommand
2.MVCRenderCommand
3.MVCRecourceCommand
至於為什麼要拆出來了,之前我們寫actionURL,一個JSP中可能有很多actionUrl,都是把它寫在mvcPortlet類中,當代碼量變大,不便於管理,且結構不是特別清晰。
下面就簡單介紹一下MVCActionCommand的用法,附上一個簡單的小例子Say Hi to U portlet
1.建一個普通的mvc-portlet,之前以為mvc-action-command是獨立存在的,也是傻傻的^^
這個是通過liferay ide外掛程式自己產生出來的模板,隨便解釋一下,@Component裡面property屬性的用法。
1、com.liferay.portlet.display-category:此處是控制的在Portlet管理處,我們添加Portlet時,Portlet是在哪個分類下顯示的。如所示,我們這裡配置的是在category.sample下面,所以我們點擊添加時可以在應用程式的樣本下面看到。category.sample是國際化的一個key值,如果我們想自己定義分類,可以修改此值即可。
2、com.liferay.portlet.instanceable:此配置意思是是否允許portlet在同一個頁面上添加多次,預設值是true,我們有些情境下可能只希望同一個Portlet,在同一個頁面只允許添加一次,則將此改為false即可。看portlet前面是一個小圓圈的表示只能添加一次,是九個小方塊的表示可以添加多次。
3、javax.portlet.display-name:顯示名稱,也就是我們上面看到的Portle的名稱。
4、javax.portlet.init-param.template-path,此值預設為“/”,而且也只能是“/”,在MVCPortlet類裡已經限制了,如果不是會報錯。
5、javax.portlet.init-param.view-template=/view.jsp,portlet被拖到Liferay頁面上後預設執行的是哪個JSP,此路徑是相對於META-INF/resource而言,我們可以在此修改相應的JSP路徑和名稱。
6、javax.portlet.resource-bundle=content.Language語言的國際化支援檔案,非必須的。如果要讓portlet支援國際化,則需要。可在Resource/content的目錄裡面建立language_zh_CN.porperties檔案,在裡面寫中文的國際化。此內容後面有部落格詳細說明。
7、javax.portlet.security-role-ref=power-user,user:將portlet部署後,此portlet預設哪些角色有將此portlet添加到頁面的許可權。
注意:此處的配置不只是只有這些,以前版本的portlet.xml、liferay-portlet.xml、liferay-display.xml的配置屬性都已經挪到了這裡,所以如果看到教程說的是對應的配置,在7.0裡面都是添加到此處。
更多的配置可以參考源碼裡面的類:PortletPropertyValidator
(此處的解釋參考胡啟穩老師的部落格)
2.然後我的目的是做一個portlet,你輸入名字之後,它會向你問好,效果如下:
3. 首先,我們要做的是要在view.jsp檔案中寫一個表單讓使用者可以讓使用者輸入值,同時在使用者點擊按鈕時觸發actionRequest處理傳回來的資料。
<%@ include file="/init.jsp" %><portlet:actionURL name="greetToU" var="myCommand"></portlet:actionURL><form method="post" action = "${myCommand}"><p>What‘s your name?</p><input type="text" name="name"><input type="submit" value="tell me"></form>${greet}
4.重點來了,如何把你寫的背景actionCommand與前台的JSP聯絡起來,同時又與你的portlet聯絡起來呢?
先看代碼,然後再解釋:
package mvc.portlet.portlet;import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCActionCommand;import com.liferay.portal.kernel.portlet.bridges.mvc.MVCActionCommand;import com.liferay.portal.kernel.util.ParamUtil;import javax.portlet.ActionRequest;import javax.portlet.ActionResponse;import org.osgi.service.component.annotations.Component;@Component(immediate = true,property = { "javax.portlet.name=mvc_Portlet", "mvc.command.name=greetToU"},service = MVCActionCommand.class)public class MyActionCommand extends BaseMVCActionCommand { @Override protected void doProcessAction(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String name = ParamUtil.getString(actionRequest, "name"); actionRequest.setAttribute("greet","Hi " + name+ ", nice to meet u!"); }}
注意上面那兩個參數,portlet.name把它與portlet聯絡起來;command.name把它與jsp上的actionUrl聯絡起來。
然後部署到7.0的portal上去就好啦,理清思路是不是簡單多了呢,哈哈
liferay MVCActionCommand的用法及例子