More后弹出的Portlet以及分类文本分析(4)

那么portletInfoElement如何得来的呢?参见PortletLocalServiceImpl_readLiferayDisplay方法:

      for (Element portletElement : categoryElement.elements("portlet")) {         String portletId = portletElement.attributeValue("id"); ...
 

所以,从这里可以看出它是从配置文件中<portlet>资源数中获得的。

而这个配置文件是哪个文件呢?

More后弹出的Portlet以及分类文本分析

从我highlight的一行点入可以看到,它传入的是下标为0的xml文件,这个调用位于PortletLocalServiceImpl类中:

Set<String> portletIds = _readPortletXML(                 servletContext, xmls[0], portletsPool, servletURLPatterns,                 pluginPackage); 

而下标为0的配置文件的文件名传入是在MainServletinitPortlets()方法声明的:

protected List<Portlet> initPortlets(PluginPackage pluginPackage)         throws Exception {          ServletContext servletContext = getServletContext();          String[] xmls = new String[] {             HttpUtil.URLtoString(                 servletContext.getResource(                     "/WEB-INF/" + Portal.PORTLET_XML_FILE_NAME_CUSTOM)),             HttpUtil.URLtoString(                 servletContext.getResource("/WEB-INF/portlet-ext.xml")),             HttpUtil.URLtoString(                 servletContext.getResource("/WEB-INF/liferay-portlet.xml")),             HttpUtil.URLtoString(                 servletContext.getResource("/WEB-INF/liferay-portlet-ext.xml")),             HttpUtil.URLtoString(                 servletContext.getResource("/WEB-INF/web.xml"))         };          PortletLocalServiceUtil.initEAR(servletContext, xmls, pluginPackage); ... 

现在一切真相大白了,原来,显示页面上的portlet的display-nameportlet.xml(被portlet-ext.xml覆盖后,如果有)的<portlet>下面的<portlet-info>下面的<title>元素的值。

总结:

经过3个多小时的探索,我们得到以下结论:

在Dockbar->Add->More显示的Portlet名称以及所属分类是按照 以下规则得到的:

对于分类:如果定义了Portlet的分类,则在liferay-display.xml中的<category>元素的值,否则,这个Portlet被加在 category.undefined 分类中。

对于Portlet名字,它是定义在portlet.xml的<portlet>元素下面的<portlet-info>元素下面的<title>元素的值。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3c799d9c291c7734ca632bd629012b82.html