国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
liferay 配置文件說(shuō)明
portlet.xmlportlet定義描述文件,它描述portlet的類型,支持Mode, preferenes和role等,遵循JSR168標(biāo)準(zhǔn)實(shí)現(xiàn),以便于移植(需要針對(duì)性的做一些小改過(guò))。下面是一個(gè)簡(jiǎn)單的定義: 2 My Account com.liferay.portlet.StrutsPortlet view-action /my_account/view 0 text/html com.liferay.portlet.StrutsResourceBundle 在JSR168標(biāo)準(zhǔn)中,定義了view/edit/help三種模式,liferay對(duì)其進(jìn)行了擴(kuò)展,增加了config/about/preview/print等模式。liferay-portlet.xmlliferay的portlet定義描述文件,是liferay對(duì)portlet.xml的擴(kuò)展描述,允許我們對(duì)portlet的呈現(xiàn)、功能和行為進(jìn)行更深入的定制。它與com.liferay.portal.model.Portlet類對(duì)應(yīng),下面是一個(gè)較為詳細(xì)的liferay-portlet定義: 19 message_boards /message_boards/edit_configuration com.liferay.portlet.messageboards.util.Indexer com.liferay.portlet.messageboards.MBFriendlyPortletURL com.liferay.portlet.messageboards.MBFriendlyURLPortletPlugin false false false false portlet類中常用的屬性:// strtus 路徑,對(duì)portlet的請(qǐng)求應(yīng)該限制在這個(gè)路徑下 private String _strutsPath; // 配置路徑,即action定義private String _configurationPath;// portlet實(shí)現(xiàn)類private String _portletClass;// lucene索引類private String _indexerClass;// scheduler類private String _schedulerClass;// portletURL處理類private String _portletURLClass;// friendURL插件private String _friendlyURLPluginClass;// 默認(rèn)的preferencesprivate String _defaultPreferences;// preferences的驗(yàn)證類private String _prefsValidator;// 是否實(shí)例化,為true時(shí)可添加多個(gè)portlet到layout上private boolean _instanceable;// 是否為系統(tǒng)portlet,private boolean _system;// 初始化參數(shù)private Map _initParams;// portlet支持的模式private Map _portletModes;// portlet支持的語(yǔ)言private Set _supportedLocales;// PortletInfoprivate PortletInfo _portletInfo;// 是否靜態(tài)portlet, 靜態(tài)portlet不能移動(dòng).private boolean _staticPortlet;// 是否為開(kāi)始的靜態(tài)portlet.private boolean _staticPortletStart;portlet解析 com.liferay.portal.service.impl.PortletLocalServiceImpl public void initEAR(String[] xmls) { String scpId = PortletServiceImpl.class.getName() + "." + _SHARED_KEY; Map portletsPool = (Map)SimpleCachePool.get(scpId); if (portletsPool == null) { portletsPool = CollectionFactory.getSyncHashMap(); SimpleCachePool.put(scpId, portletsPool); } try { List servletURLPatterns = _readWebXML(xmls[4]); Set portletIds = _readPortletXML(xmls[0], portletsPool, servletURLPatterns); portletIds.addAll( _readPortletXML(xmls[1], portletsPool, servletURLPatterns)); Set liferayPortletIds = _readLiferayPortletXML(xmls[2], portletsPool); liferayPortletIds.addAll( _readLiferayPortletXML(xmls[3], portletsPool)); // Check for missing entries in liferay-portlet.xml // 檢查在liferay-portlet中丟失的portlet實(shí)體... // Remove portlets that should not be included // 移去不應(yīng)該包括的portlet實(shí)體... } catch (Exception e) { _log.error(StackTraceUtil.getStackTrace(e)); } } // 解析portlet.xml private Set _readPortletXML( String servletContextName, String xml, Map portletsPool, List servletURLPatterns) throws DocumentException, IOException { Set portletIds = new HashSet(); if (xml == null) { return portletIds; } SAXReader reader = SAXReaderFactory.getInstance(); Document doc = reader.read(new StringReader(xml)); Element root = doc.getRootElement(); Set userAttributes = new HashSet(); Iterator itr1 = root.elements("user-attribute").iterator(); // 用戶屬性處理... itr1 = root.elements("portlet").iterator(); while (itr1.hasNext()) { Element portlet = (Element)itr1.next(); String portletId = portlet.elementText("portlet-name"); if (servletContextName != null) { portletId = portletId + Portlet.WAR_SEPARATOR + servletContextName; } portletId = PortalUtil.getJsSafePortletName(portletId); if (_log.isDebugEnabled()) { _log.debug("Reading portlet " + portletId); } portletIds.add(portletId); Portlet portletModel = (Portlet)portletsPool.get(portletId); if (portletModel == null) { portletModel = new Portlet( new PortletPK(portletId, _SHARED_KEY)); portletsPool.put(portletId, portletModel); } if (servletContextName != null) { portletModel.setWARFile(true); } if (servletURLPatterns != null) { portletModel.setServletURLPatterns(servletURLPatterns); } portletModel.setPortletClass(portlet.elementText("portlet-class")); Iterator itr2 = portlet.elements("init-param").iterator(); // 初始化參數(shù)處理... Element expirationCache = portlet.element("expiration-cache"); // cache過(guò)期處理... itr2 = portlet.elements("supports").iterator(); // 支持模式處理... Set supportedLocales = portletModel.getSupportedLocales(); // 支持語(yǔ)言處理... // 資源 portletModel.setResourceBundle( portlet.elementText("resource-bundle")); Element portletInfo = portlet.element("portlet-info"); // portlet-info處理... Element portletPreferences = portlet.element("portlet-preferences"); // preferences處理... Set unlikedRoles = portletModel.getUnlinkedRoles(); itr2 = portlet.elements("security-role-ref").iterator(); // role處理... portletModel.getUserAttributes().addAll(userAttributes); } return portletIds; } // 解析liferay-portlet.xml private Set _readLiferayPortletXML( String servletContextName, String xml, Map portletsPool) throws DocumentException, IOException { Set liferayPortletIds = new HashSet(); if (xml == null) { return liferayPortletIds; } SAXReader reader = SAXReaderFactory.getInstance(); Document doc = reader.read(new StringReader(xml)); Element root = doc.getRootElement(); Map roleMappers = new HashMap(); Iterator itr1 = root.elements("role-mapper").iterator(); // role-mapper處理... Map customUserAttributes = new HashMap(); itr1 = root.elements("custom-user-attribute").iterator(); // 定制用戶屬性處理... Map friendlyURLPlugins = _getFriendlyURLPlugins(); itr1 = root.elements("portlet").iterator(); while (itr1.hasNext()) { Element portlet = (Element)itr1.next(); String portletId = portlet.elementText("portlet-name"); if (servletContextName != null) { portletId = portletId + Portlet.WAR_SEPARATOR + servletContextName; } portletId = PortalUtil.getJsSafePortletName(portletId); if (_log.isDebugEnabled()) { _log.debug("Reading portlet extension " + portletId); } liferayPortletIds.add(portletId); Portlet portletModel = (Portlet)portletsPool.get(portletId); if (portletModel != null) { // 設(shè)置portlet屬性... // 處理FriendURL插件 portletModel.setFriendlyURLPluginClass(GetterUtil.getString( portlet.elementText("friendly-url-plugin-class"), portletModel.getFriendlyURLPluginClass())); if (Validator.isNull( portletModel.getFriendlyURLPluginClass())) { friendlyURLPlugins.remove(portletId); } else { friendlyURLPlugins.put( portletId, portletModel.getFriendlyURLPluginClass()); } // 綁定role. portletModel.getRoleMappers().putAll(roleMappers); portletModel.linkRoles(); portletModel.getCustomUserAttributes().putAll( customUserAttributes); } } return liferayPortletIds; }從上面的代碼可看出,liferay將portlet的描述定義存儲(chǔ)在一個(gè)Map中.liferay-display.xmlportlet的類別定義文件,下面是一個(gè)簡(jiǎn)單的例子: 要注意的是,在portlet.xml/liferay-portlet.xml/liferay-display.xml三個(gè)文件中的portlet-name, portlet-id必須是一致的。liferay-layout-templates.xmllayout模板定義文件.liferay-look-and-feel.xml主題定義文件.portlet的web.xml如果以war的方式發(fā)布portlet,那么它的web.xml也要進(jìn)行一些特定的說(shuō)明,下面是liferay中sample-jsp-portlet示例的web.xml: sample-jsp-portlet company_id liferay.com com.liferay.portal.kernel.servlet.PortletContextListener sample_jsp_portlet com.liferay.portal.kernel.servlet.PortletServlet portlet-class com.sample.jsp.portlet.JSPPortlet 0 sample_jsp_portlet /sample_jsp_portlet/* http://java.sun.com/portlet /WEB-INF/tld/liferay-portlet.tld 上面的listener是必須的,它用于通知liferay進(jìn)行熱部署,portlet-class指定Portlet的實(shí)現(xiàn)類,它必須遵循JSR168標(biāo)準(zhǔn),直接或間接的從javax.portlet.GenericPortlet繼承。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于 Struts 2 構(gòu)建 WebSphere Portal 上的 Portlet 應(yīng)用
Portal實(shí)現(xiàn)原理
liferay 中 開(kāi)發(fā)簡(jiǎn)單struts portlet
liferay二次開(kāi)發(fā)指南
【原創(chuàng)】Liferay Portal學(xué)習(xí)筆記之(五):開(kāi)發(fā)主題風(fēng)格theme - 冷裂 -...
Liferay權(quán)限定義
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服