JSR規范規定所有Portlet都必須直接地或者間接地實現Portlet接口同時也提供了一個叫GenericPortlet的基類該類繼承了Portlet接口統一定義了可供 Portal 容器識別和調用的方法因此大部分情況下開發人員只需要繼承GenericPortlet這個基類而不必直接實現Portlet接口
Liferay Portal也是一個支持JSR的企業門戶我們來看看在它的內部是如何擴展GenericPortlet的
) 它自定義類LiferayPortlet擴展GenericPortlet增加幾個模式如CONFIGEDIT_GUESTEDIT_DEFAULTPREVIEWPRINT
) 定義class StrutsPortlet擴展LiferayPortlet初始化模式參數並定義了process action的過程在liferay中配置文件portletcustomxml中配置各portlet的一些其中有個很重要的參數是portletclass該參數的值一般是comliferayportletStrutsPortlet表明該portlet是struts portlet
) 定義類JSPPortlet擴展LiferayPortlet該類在liferay中用不上所以這邊不做研究簡單提一下如果參數portletclass配置的值是JSPPortlet那麼該portlet是JSPPortlet
) 注意到有個IFramePortlet擴展了StrutsPortlet大家可能就有疑問了為什麼在liferay中有那麼多的portlet單單就它需要擴展StrutsPortlet通過查看該類的源代碼
view plaincopy to clipboardprint?
public static final String DEFAULT_EDIT_ACTION = /iframe/edit;
public static final String DEFAULT_VIEW_ACTION = /iframe/view;
public void init(PortletConfig config) throws PortletException {
superinit(config);
if (ValidatorisNull(editAction)) {
editAction = DEFAULT_EDIT_ACTION;
}
if (ValidatorisNull(viewAction)) {
viewAction = DEFAULT_VIEW_ACTION;
}
}
public static final String DEFAULT_EDIT_ACTION = /iframe/edit;
public static final String DEFAULT_VIEW_ACTION = /iframe/view;
public void init(PortletConfig config) throws PortletException {
superinit(config);
if (ValidatorisNull(editAction)) {
editAction = DEFAULT_EDIT_ACTION;
}
if (ValidatorisNull(viewAction)) {
viewAction = DEFAULT_VIEW_ACTION;
}
}可以清楚的知道IFramePortlet定義自身所需要的default action當portlet沒有配置editAction和viewAction的值時在代碼中賦予默認的值
下面圖示了這個繼承擴展關系
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26393.html