您的位置:首页 > Web前端

Liferay研究之廿七:一些有用的API分析

2008-10-12 22:22 218 查看
 com.liferay.portal.util.PropsUtil
在Portal.properties中设置的每个属性,都有一个类的属性与之对应,这个类就是:PropsUtil,每个属性都是静态的。对应的还有一个类是:PropsValues可以直接获取属性对应的值。如果想扩展portal.properties,在其中加上自己的值,那么就需要修改这两个类。 com.liferay.portal.util.WebAppPool.java
描述这样一个数据结构<companyId, key, value>用来存储所有Company可以使用的所有应用列表。WebAppPool.get(companyId, WebKeys.PORTLET_CATEGORY)就是获取某个company的应用分类;获取之后先缓存,如果后来有了新的变化,还可以新旧一起merge。com.liferay.portal.util.PortalInstances.java
用来描述Portal上所有的实例,也就是与服务器管理中相关的那些,每个Company会有一个portal instance。com.liferay.portal.util.Portal.java, PortalImpl.java
描述了一个Portal Server, 通过这个类,在Portal加载后可以获知服务器的相关信息,比如portal的lib路径,Server Name,系统角色,系统组,组织,保留参数关键字等等。(通过分析该类,还知道了,系统可以不部署在/ROOT目录下面,可以部署在任何路径下,只需对应的改变portal.properites中的portal.ctx属性即可)该类不但具有名词属性,还具有动词属性,比如renderPortlet方法。具体的逻辑是:在获取了portlet对象,及其位置属性(columnPos, columnId)之后,将其放到request中,然后include render_portlet.jsp来显示一个Portlet.com.liferay.portal.model.Portlet.java, model.impl.PortletImpl.java
描述了一个Portlet的所有属性。其值的设置都来源于liferay-portlet.xml中的定义,比如这个portlet是否是system portlet(用户不能操作)com.liferay.portal.velocity.VelocityVariables.java
所有Velocity模板template中引用的对象变量,均在此处进行定义。并且,该类定义了一个特殊的变量$init,这个变量对应一个公用的init.vm,也就是_unstyled/template/init.vm,这个模板中定义了各种Velocity的变量(比如是否显示my_place),类似init.jsp,被其他所有的模板来引用,比如在portal_normal.vm中,第一行一般就是:#parse($init)一个例外:在template中$theme并不是在VelocityVariables中定义的Theme类型,而是通过ThemeUtil.includeVM,替换为了VelocityTagLib对象。com.liferay.portal.servlet.taglib.portlet.DefineObjectsTagUtil.java
根据pageContext可以获取Portal相关的变量有:lifecycle = (String)req.getAttribute(PortletRequest.LIFECYCLE_PHASE); 有几个可能的值:PortletRequest.ACTION_PHASEPortletRequest.EVENT_PHASEPortletRequest.RENDER_PHASEPortletRequest.RESOURCE_PHASEportletConfig = (PortletConfigImpl)req.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);portletRequest = (PortletRequest)req.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST); 在不同阶段其在Request中的属性名也不同,分别是:actionRequest, eventRequest, renderRequest, resourceRequestportletPreferences = (PortletPreferences)pageContext.getAttribute("portletPreferences");portletSession = (PortletSession)pageContext.setAttribute("portletSession");portletResponse = (PortletResponse)pageContext.setAttribute(portletResponseAttrName); 其中portletResponseAttrName在不同的Lifecycle阶段值也不同,分别是:actionResponse, eventResponse, renderResponse, resourceResponsecom.liferay.portal.model.LayoutTypePortlet.java, model.impl.LayoutTypePortletImpl.java
生成portlet instance id的方法:portletId + getFullInstanceSeparator()处理typeSettings的方法:先通过LayoutTypeImpl调用Layout.getTypeSettingsProperties(),将数据库中存储的typeSettings内容转换为Properties类型。然后就可以根据LayoutTypePortletImpl中所定义的各个属性来取typeSettings的值了。setLayoutTemplateId(long userId, String newLayoutTemplateId, boolean checkPermission)的逻辑重新设定一个layout的template时,可能涉及到column的变化,以及再oldTempate column上的portlet位置的变化。因此,重新设定一个templateId之后,还需要更新其上面的portlet. reorganizePortlets(newColumns, oldColumns);重新设定的逻辑就是:如果新模板中的列数比旧模板的少,就将旧模板中多出来的列中的portlets全部放到新模板的最后一列。com.liferay.portlet.layoutconfiguration.util.xml.RuntimeLogic, (PortletLogic, ActionURLLogic [ RenderURLLogic])
PortletLogic:在文章中可以动态的嵌入Portlet.具体的做法是,在文章编辑中,源代码中,插入下面代码:<runtime-portlet name="3" instance="" queryString="" />具体参数说明:name→Portlet的ID,可以参考liferay-custom.xml中定义;instance→如果portlet是可以instancable的,那么这里需要指明其instanceId的后4位,如果不清楚最好到数据库中进行查找一下。比如从portletPreferences表中;queryString是附带的参数。这样,文章中就可以动态的嵌入一个查询了。ActionURLLogic:<runtime-action-url portlet-name="" param-name-1="" param-value-1="" param-name-2="" param-value-2="" .... />RenderURLLogic:<runtime-render-url portlet-name="" param-name-1="" param-value-1="" param-name-2="" param-value-2="" .... />com.liferay.portal.kernal.search.Indexer
该接口有两个方法:DocumentSummary getDocumentSummary(Document, PortletURL)void reindex(String[] ids)DocumentSummary是一个简要检索结果的描述,也就是标题是什么,什么内容,链接到什么地方;getDocumentSummary的过程,也就是从Lucene Document中获取title, content以及entityId三个对应的域内容,并构造DocumentSummary, 其中entityId用来构造显示该document的链接地址,一般是调用一个renderURL。要想开发自己的Indexer,那么首先需要继承kernal.search.Indexer,实现上面的两个方法。并添加addEntity, updateEntity, deleteEntity等方法。用来实现对全文检索内容的增加,更新及删除。以构造过程为例,主要就是先新建一个lucene Document对象,并插入不同keywords的content(类似一个Map),然后用LuceneUtil.getWriter(companyId)获取IndexerWriter, 将doc写如索引。com.liferay.portal.theme.ThemeDisplay
这个类描述了界面显示的绝大部分资源;包括:layout, group, user, theme,colorScheme, locale, language, path, logo, URL, showIcon等等;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息