![NCV6開(kāi)發(fā)平臺(tái)技術(shù)紅皮書_第1頁(yè)](http://file4.renrendoc.com/view12/M01/09/04/wKhkGWXFfxiAEd6KAACnCpo64e0110.jpg)
![NCV6開(kāi)發(fā)平臺(tái)技術(shù)紅皮書_第2頁(yè)](http://file4.renrendoc.com/view12/M01/09/04/wKhkGWXFfxiAEd6KAACnCpo64e01102.jpg)
![NCV6開(kāi)發(fā)平臺(tái)技術(shù)紅皮書_第3頁(yè)](http://file4.renrendoc.com/view12/M01/09/04/wKhkGWXFfxiAEd6KAACnCpo64e01103.jpg)
![NCV6開(kāi)發(fā)平臺(tái)技術(shù)紅皮書_第4頁(yè)](http://file4.renrendoc.com/view12/M01/09/04/wKhkGWXFfxiAEd6KAACnCpo64e01104.jpg)
![NCV6開(kāi)發(fā)平臺(tái)技術(shù)紅皮書_第5頁(yè)](http://file4.renrendoc.com/view12/M01/09/04/wKhkGWXFfxiAEd6KAACnCpo64e01105.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
UAP6.1Portal技術(shù)紅皮書UAP技術(shù)紅皮書系列第PAGE1/51頁(yè) UAP開(kāi)發(fā)紅皮書系列UAP6.1Portal技術(shù)紅皮書UAP中心編著目錄第一章 Portal簡(jiǎn)介 3第二章 Portal架構(gòu)圖 4第三章 預(yù)制Portlet 53.1 框架Portlet 63.1.1 if_height 73.1.2 if_src 83.1.3 if_width 93.2 TriggerIframePortlet與MonitorIframePortlet 103.3 FreeMarkerPortlet 103.3.1 繼承Portlet 113.3.2 編輯Portlet 113.4 任務(wù)Portlet 123.4.1 查詢?nèi)蝿?wù)列表 133.4.2 獲取單據(jù)類型 133.4.3 獲取任務(wù)處理URL 133.4.4 批量任務(wù)更新 133.4.5 顯示獲取字段 143.4.6 執(zhí)行命令 143.5 菜單Portlet 153.5.1 我的功能Portlet 153.5.2 浮動(dòng)菜單 163.5.3 頁(yè)簽Portlet 163.5.4 OutLook導(dǎo)航Portlet 16第四章 Portal界面 174.1 概念 184.2 創(chuàng)建Portal界面 184.3 布局設(shè)計(jì) 194.3.1 布局排序 194.3.2 布局Icon 194.3.3 布局禁用 204.3.4 布局復(fù)制粘貼 214.4 綁定菜單 21第五章 Portlet開(kāi)發(fā) 235.1 Portlet容器 245.1.1 獲得Portlet容器 245.1.2 使用Portlet容器 245.2 Portlet分類 255.3 Portlet視圖 275.4 Portlet資源 275.5 Portlet動(dòng)作 275.6 Portlet事件 285.6.1 創(chuàng)建Portlet事件 285.6.2 觸發(fā)Portlet事件 285.6.3 響應(yīng)Portlet事件 295.6.4 Portlet事件輸出 295.7 Portlet參數(shù) 305.8 Portlet參數(shù)編輯器 305.9 Portlet發(fā)布 315.10.1 發(fā)布portlet 315.10.2 更新發(fā)布的portlet 32第六章 主題開(kāi)發(fā) 346.1 概述 356.2 頁(yè)面樣式 356.3 布局樣式 356.4 Portlet樣式 366.5 皮膚 37第七章 門戶高級(jí)功能 387.1 登錄前后處理,指定登錄后頁(yè)面 397.2 登錄鏈 397.3 CA登錄 417.4 域認(rèn)證 427.5 第三方登錄 427.6 門戶擴(kuò)展點(diǎn) 437.7 門戶設(shè)置 457.8 門戶FreeMarker擴(kuò)展 467.9 門戶模塊配置 477.10 門戶統(tǒng)一身份認(rèn)證 49Portal簡(jiǎn)介UAPPortal是基于JSR286規(guī)范而實(shí)現(xiàn)的一套J2EE技術(shù)體系架構(gòu)的Portal。它構(gòu)建于UAP平臺(tái)之上,提供了靈活而豐富的個(gè)性化和管理定制功能。UAPPortal允許多種安全認(rèn)證方式和自選第三方系統(tǒng)用戶來(lái)源,采取了基于角色訪問(wèn)控制(RBAC)的權(quán)限模型。并提供了完善和通用的第三方系統(tǒng)集成框架和單點(diǎn)登錄框架,UAPPortal發(fā)版默認(rèn)集成NC、IUFO、BO、自定義查詢報(bào)表應(yīng)用,實(shí)施SSO比商業(yè)Portal簡(jiǎn)單易用。它提供的Portal管理功能,允許管理員在運(yùn)行態(tài)對(duì)Portal進(jìn)行定制,而無(wú)需重啟甚至編碼。同時(shí),內(nèi)建的換膚機(jī)制使得實(shí)現(xiàn)自定義皮膚非常簡(jiǎn)單。UAPPortal提供了引入了一套開(kāi)發(fā)工具,,使得Portal開(kāi)發(fā)非常簡(jiǎn)單。Portal頁(yè)面元素截圖介紹如下:上圖即是門戶的一個(gè)布局頁(yè)面,頁(yè)面中紅色方框區(qū)域就是組成該布局的各個(gè)portlet,每個(gè)portlet可以自由定制自己的皮膚、樣式和內(nèi)容。藍(lán)色框區(qū)域是其他布局頁(yè)面。Portal架構(gòu)圖預(yù)制Portlet本章內(nèi)容概要:框架PortletTriggerIframePortlet與MonitorIframePortletFreeMarkerPortlet任務(wù)Portlet菜單Portlet
框架Portlet框架Portlet是一通用簡(jiǎn)單集成Portlet,可用于管理員為所有用戶定制內(nèi)容。管理員可定制此Portlet完成對(duì)一現(xiàn)存站點(diǎn)的引入,可以定義任意數(shù)量。比如:將常用站點(diǎn)http://ufpark/PortalDefault.aspx引入Portal的一個(gè)頁(yè)簽中,只需要做下面幾步:1)系統(tǒng)管理>應(yīng)用平臺(tái)管理>門戶配置>布局管理中選擇新建系統(tǒng)布局,選擇框架Portlet并拖入,點(diǎn)擊保存。示意圖如下:2)在布局管理中刷新并展開(kāi)剛創(chuàng)建的布局,找到剛剛加入的框架portlet,設(shè)置其鏈接地址屬性,指明url地址。對(duì)于一個(gè)布局中只有一個(gè)框架portlet的情況,設(shè)置高度為0,這樣IFramePortlet的高度會(huì)自動(dòng)調(diào)整來(lái)適應(yīng)頁(yè)面的高度,設(shè)置完成后保存。示意圖如下:3)需瀏覽此布局的用戶注銷重新登陸,即可看到此布局。示意圖如下:該P(yáng)ortlet可以配置的個(gè)性化信息如下:if_height說(shuō)明設(shè)置ifreame的高度可選值0:適應(yīng)頁(yè)面大小,撐滿頁(yè)面-1:適應(yīng)內(nèi)容高度其它:指定像素的高度舉例<preference><name>if_height</name> <value>-1</value> <read-only>false</read-only></preference>if_src說(shuō)明指定ifreame內(nèi)容的url取值方式方式1:從公共參數(shù)里取(如Url傳參的形式);方式2:從屬性里取;注:公共參數(shù)優(yōu)先級(jí)較高舉例<preference> <name>if_src</name> <description>鏈接地址</description> <value><![CDATA[/portal/pages/view.jsp]]></value> <read-only>false</read-only></preference>使用Url傳參的形式,舉例截圖如下:if_width說(shuō)明指定iframe的寬度可選值百分比:如100%舉例<preference> <name>if_width</name> <value>100%</value> <read-only>false</read-only></preference>開(kāi)發(fā)過(guò)程:在Portlet上點(diǎn)擊右鍵,從模板新建Portlet,選擇IframePortlet,輸入id,名稱及嵌入的URL即可。在編輯器右邊屬性欄中可修改portlet對(duì)應(yīng)的類、描述等信息。在下方模型視圖中配置此portlet的具體屬性。TriggerIframePortlet與MonitorIframePortletTriggerIframePortlet是可以觸發(fā)switchIframeContentEvent事件的框架Portlet,它繼承自框架Portlet。該portlet會(huì)觸發(fā)switchIframeContentEvent事件,監(jiān)聽(tīng)switchIframeContentEvent的portlet會(huì)響應(yīng)該事件。常見(jiàn)的監(jiān)聽(tīng)Portlet有MonitorIFramePortlet及其子類。使用舉例:通過(guò)該portlet可以設(shè)置響應(yīng)switchIframeContentEvent事件的url。示例代碼如下:document.getContainer().doAction(url)MonitorIframePortlet是監(jiān)聽(tīng)switchIframeContentEvent事件的IframePortlet,常與TriggerIframePortlet共同使用。當(dāng)是自定義觸發(fā)的Portlet時(shí)應(yīng)將switchIframeContentEvent加入support-publish-event,不建議在一個(gè)Page中引用兩個(gè)MonitorIframePortlet。FreeMarkerPortlet套用FreeMarker模板的Portlet,該portlet主要用于解析FTL文件路徑并把ftl文件內(nèi)容渲染成Html。繼承Portlet(1)創(chuàng)建一個(gè)類繼承自FreeMarkerPortlet,代碼示例如:(2)在該類所在包(nc.test)下創(chuàng)建一個(gè)同名的ftl文件FreeMarkerPortlet.ftl編輯Portlet(1)在Portlets節(jié)點(diǎn)上點(diǎn)擊鼠標(biāo)右鍵,可新建portlet分類或直接新建portlet。(2)輸入Portlet的id及name,點(diǎn)擊OK按鈕。新建并打開(kāi)portlet編輯器。(3)在編輯器右邊屬性欄中可修改portlet對(duì)應(yīng)的類設(shè)置為剛才新建的類nc.test.FreeMarkerPortlet即可。任務(wù)Portlet任務(wù)portlet主要包括任務(wù)列表的查詢、單據(jù)類型、任務(wù)處理的URL、顯示字段的獲取、和指令的執(zhí)行。查詢?nèi)蝿?wù)列表查詢?nèi)蝿?wù)列表:/***查詢?nèi)蝿?wù)列表.*/WfmTaskVO[]qryTaskList(TaskQryParamparam,PaginationInfopinfo);參數(shù)說(shuō)明:param任務(wù)查詢參數(shù),包括狀態(tài)、系統(tǒng)、單據(jù)類型、關(guān)鍵字、當(dāng)前用戶等。Pinfo:分頁(yè)信息返回:任務(wù)列表獲取單據(jù)類型獲得單據(jù)類型:/***獲得單據(jù)類型*/WfmFlwTypeVO[]getBillTypes();獲取任務(wù)處理URL獲得任務(wù)處理的URL:/***獲得任務(wù)處理URL*/TaskProcessUIgetTaskProcessUrl(Stringpk_task);參數(shù)說(shuō)明:pk_task任務(wù)的主鍵返回:任務(wù)UI界面批量任務(wù)更新批量任務(wù)更新:/***批量任務(wù)執(zhí)行*/StringdoMutiTaskProcess(String[]pk_task);通過(guò)多個(gè)任務(wù)的id進(jìn)行多個(gè)任務(wù)更新操作。顯示獲取字段顯示字段的獲?。?***獲取顯示的字段*/Map<String,String>getVisableColumn(Stringbilltype);通過(guò)單據(jù)類型查詢需要顯示的字段。執(zhí)行命令執(zhí)行命令:/***執(zhí)行命令*/voiddoCmd(Stringcmd,Stringpk);根據(jù)不同的指令走相應(yīng)的url,如根據(jù)是“便簽”或是“催辦”,分別執(zhí)行“/portal/pt/task/scratchpad”和“/portal/app/mockapp/urgencyView”的鏈接。示例代碼如下:菜單Portlet我的功能Portlet該portlet主要功能是顯示菜單組,分為綁定菜單和動(dòng)態(tài)集成菜單。綁定菜單綁定菜單即為布局綁定一個(gè)菜單,有“系統(tǒng)管理”權(quán)限的用戶登錄,在“門戶配置”的“布局管理”模塊,選擇一個(gè)布局,點(diǎn)擊“高級(jí)設(shè)置”即可打開(kāi)布局菜單綁定頁(yè)面,選擇一個(gè)“綁定連接組”即可完成菜單綁定,示意圖如下:動(dòng)態(tài)集成菜單動(dòng)態(tài)集成菜單主要是通過(guò)虛菜單接口在頁(yè)面的綁定,具體實(shí)現(xiàn)類去完成菜單的動(dòng)態(tài)的生成。如NC系統(tǒng)的消息通過(guò)虛菜單的實(shí)現(xiàn)進(jìn)行動(dòng)態(tài)抓取,并在我的功能區(qū)進(jìn)行顯示。虛菜單接口IVirtualMenuProvider說(shuō)明如下://獲取菜單項(xiàng)List<MenuItemAdapterVO>getMenuItems();//消息狀態(tài)數(shù)目IntegergetStat();浮動(dòng)菜單浮動(dòng)菜單Portlet主要是顯示界面上Portal頁(yè)面綁定的菜單。開(kāi)發(fā)方式:(1)系統(tǒng)管理>
應(yīng)用平臺(tái)管理>門戶配置>
布局管理中打開(kāi)布局設(shè)計(jì)器。拖放一個(gè)浮動(dòng)菜單Portlet.選中該P(yáng)ortlet.設(shè)置樣式為浮動(dòng)。(2)選中步驟1創(chuàng)建的布局.點(diǎn)高級(jí)設(shè)置.選擇一個(gè)綁定菜單。頁(yè)簽Portlet頁(yè)簽Portlet是門戶提供的一種菜單展現(xiàn)樣式.以Tab頁(yè)的形式來(lái)展示菜單的內(nèi)容。開(kāi)發(fā)方式:(1)系統(tǒng)管理>
應(yīng)用平臺(tái)管理>門戶配置>
布局管理中打開(kāi)布局設(shè)計(jì)器.拖放一個(gè)頁(yè)簽Portlet。(2)展開(kāi)步驟1創(chuàng)建的布局,選擇頁(yè)簽Portlet,點(diǎn)高級(jí)設(shè)置.選擇一個(gè)菜單。頁(yè)簽Portlet可以設(shè)置高度寬度。OutLook導(dǎo)航PortletOutlook導(dǎo)航Portlet是門戶提供的一種菜單展現(xiàn)樣式。以O(shè)utLook導(dǎo)航的形式來(lái)展示菜單的內(nèi)容。開(kāi)發(fā)方式:(1)系統(tǒng)管理>
應(yīng)用平臺(tái)管理>門戶配置>
布局管理中打開(kāi)布局設(shè)計(jì)器。拖放一個(gè)OutLook導(dǎo)航Portlet。(2)拖入一個(gè)布局,選中;點(diǎn)擊樣式下拉框,選擇”框架布局”并保存。(3)展開(kāi)步驟1創(chuàng)建的布局,選擇頁(yè)簽Portlet,點(diǎn)高級(jí)設(shè)置.選擇一個(gè)菜單;也可以在此設(shè)置OutLook導(dǎo)航Portlet的高度與寬度。注意:為了實(shí)現(xiàn)在頁(yè)簽內(nèi)打開(kāi)OutLook導(dǎo)航Portlet選中的菜單項(xiàng),需要在當(dāng)前頁(yè)面中的一個(gè)布局樣式設(shè)置為框架布局。該布局與正常布局一樣,可以容納Portlet。但是在收到OutLook的請(qǐng)求時(shí)會(huì)將布局內(nèi)容切換到菜單項(xiàng)界面。Portal界面本章內(nèi)容概要:概念創(chuàng)建Portal界面布局設(shè)計(jì)布局分配多級(jí)布局綁定菜單
概念UAPPortal使用Pml界面組件結(jié)構(gòu)標(biāo)記語(yǔ)言對(duì)頁(yè)面進(jìn)行描述。Pml包括布局(Layout)對(duì)象及Portlet對(duì)象。布局可嵌套布局和Portlet,從而組成相對(duì)復(fù)雜的界面。一個(gè)頁(yè)面中的portlet不能重復(fù)。創(chuàng)建Portal界面在“Portal頁(yè)面”節(jié)點(diǎn)上點(diǎn)擊鼠標(biāo)右鍵新建page頁(yè)面。輸入id及tilte,點(diǎn)擊ok按鈕,新建Page完成,并打開(kāi)page編輯器。在page編輯器中進(jìn)行page布局配置。布局設(shè)計(jì)布局排序布局排序是指在布局列表中“是否主頁(yè)”的那一列,是主頁(yè)的分組會(huì)按照優(yōu)先級(jí)排序,不是主頁(yè)的分組也會(huì)按照優(yōu)先級(jí)進(jìn)行排序。示意圖如下:布局Icon設(shè)置布局Icon布局Icon是為已創(chuàng)建的布局設(shè)置綁定的圖標(biāo),示意圖如下:獲取圖標(biāo)通過(guò)步驟1設(shè)定好布局的菜單和圖標(biāo)后,可以通過(guò)導(dǎo)航欄菜單項(xiàng)獲取其圖標(biāo)。示意代碼如下:示意代碼如下:獲取頁(yè)簽Page[]myPages=PortalPageDataWrap.getUserPages();PageMenumenu=PortalPageDataWrap.getUserMenu(myPages);Map<String,Object>root=newHashMap<String,Object>();Root.put(“USER_MENU”,MENU);Ftl文件<#assignmenuitems=USER_MENU.items>獲取圖標(biāo)<imgsrc="${menuitem.icon}"/>布局禁用布局禁用是停止用戶使用該布局,通過(guò)“布局管理”的“高級(jí)設(shè)置”,把“是否啟用”開(kāi)關(guān)關(guān)閉即可。示意圖如下:布局復(fù)制粘貼布局的復(fù)制和粘貼是方便布局快速高效的重用,通過(guò)選中要重用的布局點(diǎn)擊“復(fù)制”按鈕即可獲得該布局的一份拷貝,選擇要放入的組織后點(diǎn)擊“粘貼”按鈕即可把拷貝的布局復(fù)制到目標(biāo)組織下。示意圖如下:綁定菜單綁定菜單是為布局設(shè)置菜單,設(shè)置菜單后可以直接通過(guò)菜單使用該布局,綁定示意圖如下:Portlet開(kāi)發(fā)本章內(nèi)容概要:Portlet容器Portlet分類Portlet視圖Portlet資源Portlet動(dòng)作Portlet事件Portlet參數(shù)Portlet參數(shù)編輯器Portlet權(quán)限分配Portlet發(fā)布
Portlet容器獲得Portlet容器場(chǎng)景1:JSP頁(yè)面中<script>getContainer(‘#<%=PAGEXXXindowed%>’);</script>場(chǎng)景2:IframePortlet頁(yè)面中<script>document.getContainer();</script>注意:(1)在Iframe中獲得容器,必須保證iframe頁(yè)面與Portal在同一個(gè)域下。(2)要判斷Iframe中是否已經(jīng)注入了此函數(shù)。使用Portlet容器Portlet容器提供的函數(shù):方法名稱必須參數(shù)作用返回值備注createPart*title是標(biāo)題新創(chuàng)建的鏈接塊在Portlet窗口上創(chuàng)建一個(gè)鏈接塊href是鏈接createSep*segment否分隔符新創(chuàng)建的塊在Portlet窗口上創(chuàng)建一個(gè)分割塊createBlankPart*新創(chuàng)建的塊在Portlet窗口上創(chuàng)建一個(gè)空白塊setTitle*title是標(biāo)題標(biāo)題對(duì)象設(shè)置標(biāo)題setContent*content是內(nèi)容內(nèi)容對(duì)象設(shè)置內(nèi)容setExposed*當(dāng)前容器隱藏外框setUnExposed*當(dāng)前容器恢復(fù)外框doMax*窗口最大化doReSize*窗口復(fù)原showTips*顯示提示框hideTips*隱藏提示框doView切換到查看模式doEdit切換到編輯模式doHelp切換到幫助模式doRefreshtimesamp是時(shí)間間隔-設(shè)置刷Portlet新周期doAction調(diào)用Portlet默認(rèn)事件ProcessActiondoActionframeUrl是鏈接地址-調(diào)用Portlet默認(rèn)的事件,并傳遞一個(gè)frameUrl參數(shù)doActionname是事件名稱-調(diào)用指定的Portlet動(dòng)作param是參數(shù)列表getOuter最外層的布局獲得最外層的布局getRow所在列獲得所在的列注:標(biāo)有*號(hào)的方法可以重載。Portlet分類Portlet分類是為了讓Portlet更容易查找,在Portlets節(jié)點(diǎn)上點(diǎn)擊鼠標(biāo)右鍵選擇“新建Portlet分類”,彈出新建Portlet分類對(duì)話框。輸入ID、text、i18nName后點(diǎn)擊OK按鈕,Portlet分類創(chuàng)建成功。在建好的Portlet分類上點(diǎn)擊鼠標(biāo)右鍵??梢栽诜诸愔行陆≒ortlet,或編輯、刪除當(dāng)前分類。Portlet視圖UAPPortal6.0支持“查看”、“編輯”、“幫助”三種標(biāo)準(zhǔn)視圖,有關(guān)視圖的信息,請(qǐng)參考JSR286規(guī)范。UAPPortal6.0支持“最大化”、“正?!?、“最小化”三種模式,有關(guān)模式的信息,請(qǐng)參考JSR286規(guī)范。Portlet資源UAPPortal6.0支持Portlet資源請(qǐng)求,詳細(xì)信息請(qǐng)參考JSR286規(guī)范。示例代碼://使用Tag獲取資源<imgsrc="<portlet:resourceURLid="/images/blackpoint.gif"/>">Portlet動(dòng)作Portlet動(dòng)作是Portlet前后臺(tái)交互的一種方式??梢酝ㄟ^(guò)Tag、JavaScript來(lái)調(diào)用。示例代碼://使用ProcessActionAnnotation定義一個(gè)動(dòng)作,名稱是“myaction1”@ProcessAction(name="myaction1")publicvoidmyaction1(ActionRequestrequest,ActionResponseresponse){ ….}//Tag調(diào)用動(dòng)作<portlet:actionURLname=”myaction1”var="url"></portlet:actionURL><ahref="<%=url%>">Help</a>//JavaScript調(diào)用動(dòng)作<script>getContainer('#<%=windowId%>').doAction(”myaction1”,{});</script>Portlet事件創(chuàng)建Portlet事件Portlet事件是JSR286中新引入的一個(gè)特性,規(guī)范了Portlet間的交互。
Portlet事件是松耦合的,在一個(gè)頁(yè)面中可以沒(méi)有接收者或者多個(gè)接收者。通過(guò)Portal定義中的“事件”節(jié)點(diǎn)對(duì)portlet相關(guān)的事件進(jìn)行定義。事件編輯器如下:注意:值類型必須是可被JAXB序列化的對(duì)象觸發(fā)Portlet事件a)在Portlet編輯器模型視圖中選擇SupportedPublishingEvent選項(xiàng)卡,選中要觸發(fā)的事件。b)在Portlet類中觸發(fā)事件示例代碼:@ProcessAction(name="myaction2")publicvoidmyaction2(ActionRequestrequest,ActionResponseresponse){ //觸發(fā)事件. response.setEvent("myevent1","helloportal!");}響應(yīng)Portlet事件a)在Portlet編輯器模型視圖中選擇SupportedProcessingEvent選項(xiàng)卡,選中要響應(yīng)的事件。b)在Portlet類中響應(yīng)事件 示例代碼:/***處理事件*/@ProcessEvent(name="myevent1")publicvoidmyevent1(EventRequestrequest,EventResponseresponse){ Stringvalue= (String)request.getEvent().getValue();response.setRenderParameter("value",value);}/***輸出View視圖*/publicvoiddoView(RenderRequestrequest,RenderResponseresponse)throwsPortletException,IOException{ Stringvalue=request.getParameter("value",null);}Portlet事件輸出a)Portlet容器默認(rèn)在處理完一個(gè)Portlet的事件之后,會(huì)將這個(gè)Portlet的view視圖重新輸出到前臺(tái)。b)UAPPortal6.0提供了一種”執(zhí)行腳本”的響應(yīng)方式,在視圖層執(zhí)行一段JavaScript腳本,不重新輸出Portlet視圖。示例代碼:@ProcessEvent(name="execScriptEvent")publicvoidexecScriptEvent(EventRequestrequest,EventResponseresponse){ Stringvalue=(String)request.getEvent().getValue(); addExecScript(response,"alert('"+value+"');");}Portlet參數(shù)Portlet參數(shù)描述如下表:參數(shù)名稱參數(shù)作用備注name參數(shù)的名稱參數(shù)的名稱Value參數(shù)的值復(fù)雜的值需要用CDATA包括。如:<value><![CDATA[/portal/pages/view.jsp]]></value>read-only設(shè)置是否可修改為true時(shí)頁(yè)面不能修改description參數(shù)的描述參數(shù)的描述注:該表參考portlet.xml文件內(nèi)容。Portlet參數(shù)編輯器參數(shù)編輯器是通過(guò)擴(kuò)展portlet配置編輯擴(kuò)展點(diǎn)完成的,擴(kuò)展可以對(duì)頁(yè)面portlet參數(shù)進(jìn)行改造或是定制完成自己的業(yè)務(wù)需求。示例:注:需要把自己的擴(kuò)展點(diǎn)在plugin.xml中進(jìn)行綁定。上述例子的擴(kuò)展點(diǎn)配置舉例如下:Portlet發(fā)布門戶提供了對(duì)所有portlet的管理,默認(rèn)出廠情況下預(yù)置了一些常用的portlet,如框架portlet、任務(wù)portlet、菜單portlet等。掛接在門戶上的產(chǎn)品可以使用這些portlet進(jìn)行自己業(yè)務(wù)邏輯的開(kāi)發(fā),有時(shí)產(chǎn)品也需要通過(guò)自己的模板產(chǎn)生portlet,以在業(yè)務(wù)邏輯頁(yè)面中重用這些portlet。這就需要門戶提供統(tǒng)一產(chǎn)品的portlet發(fā)布和更新功能。發(fā)布portlet發(fā)布portlet可以發(fā)布到指定組織下也可以發(fā)布到默認(rèn)組織下,接口定義如下: //發(fā)布portlet到默認(rèn)組織下publicvoidpubPortletByTemplate(Stringtitle,Stringid,StringtmpModule,StringtmpPortletid,Map<String,String>updatePair)throwsPortalServiceException;Title:要發(fā)布portlet的標(biāo)題Id:portlet的idtmpModule:模塊tmpPortletid:原生portlet的idupdatePair:portlet屬性集合 //根據(jù)模板發(fā)布portlet到指定組織下publicvoidpubPortlet2OrgByTemplate(Stringtitle,Stringid,StringtmpModule,StringtmpPortletid,Map<String,String>updatePair,Stringpk_group)throwsPortalServiceException; Title:要發(fā)布portlet的標(biāo)題Id:portlet的idtmpModule:模塊tmpPortletid:原生portlet的idupdatePair:portlet屬性集合pk_group:組織的pk示例: publicvoidtestPubPortlet()throwsException{ IPubPortletServiceservice=NCLocator.getInstance().lookup(IPubPortletService.class); Stringurl="a.jsp"; Stringtitle="測(cè)試報(bào)表發(fā)布" ; Stringid="PK"+System.currentTimeMillis(); Stringmodule="pmng"; Stringportletid="MgrContentPortlet"; service.pubPortletByTemplate(title,id,module,portletid,newHashMap<String,String>()); }更新發(fā)布的portlet更新portlet主要是更新porltet的preferences屬性,如高度、寬度等。接口定義如下://更新由模板生成的portletpublicvoidupdatePubedPortlet(Stringid,Stringmodule,Map<String,String>updatePair,Stringpk_group)throwsPortalServiceException; Id:portlet的idModule:portlet所在的模塊updatePair:要更新的屬性集合pk_group:portlet所在組織的pk示例:publicvoidtestupdatePubedPortlet()throwsException{ IPubPortletServiceservice=NCLocator.getInstance().lookup(IPubPortletService.class); Stringid="0001A11000000000044K"; Stringmodule="pmng"; Stringpk_group="0001A11000000000043F"; Map<String,String>updatePair=newHashMap<String,String>(); updatePair.put("width","12px"); updatePair.put("height","50"); service.updatePubedPortlet(id,module,updatePair,pk_group); }3、新建布局.打開(kāi)系統(tǒng)管理>應(yīng)用平臺(tái)管理>門戶配置>布局管理,新建一個(gè)布局,然后選擇集成portlet。保存后展開(kāi)布局,選中集成Portlet,點(diǎn)擊高級(jí)設(shè)置中,系統(tǒng)編碼選中剛才配置的NC系統(tǒng)。主題開(kāi)發(fā)本章內(nèi)容概要:概述頁(yè)面樣式(待續(xù))布局樣式Portlet樣式概述門戶的主題由頁(yè)面樣式,布局樣式,Portlet樣式及一個(gè)描述文件構(gòu)成.描述文件定義了主題的名稱,以及綁定的UAPWEB的主題。樣式是由FreeMarker模板構(gòu)成.可以認(rèn)為是一個(gè)普通的HTML片段。頁(yè)面樣式布局樣式布局樣式是一個(gè)名為warp的FreeMarker宏.有兩個(gè)參數(shù)layout和page.宏內(nèi)部由一個(gè)div標(biāo)簽.標(biāo)簽上的tp=layout屬性標(biāo)志了這個(gè)div是一個(gè)布局樣式的邊.tp,id,pid屬性不可以被刪除.<#nested>標(biāo)記了嵌入的portlet或者layout,可以在<#nested>外邊圍繞上html標(biāo)簽修改布局顯示的樣式。Portlet樣式標(biāo)準(zhǔn)的Portlet樣式由外框,標(biāo)題區(qū),自定義區(qū),手柄區(qū),內(nèi)容區(qū)組成.Portlet邊框是Portlet最外層元素.由一個(gè)tp=Portlet的標(biāo)記HTML標(biāo)簽構(gòu)成Portlet頭部區(qū)域一般由內(nèi)容區(qū),自定義區(qū),手柄區(qū)組成.由一個(gè)帶有tp=pHead屬性的HTML標(biāo)簽包裹.鼠標(biāo)移動(dòng)到頭部區(qū)域,會(huì)出現(xiàn)工具條.內(nèi)容區(qū)是包含一個(gè)tp=pTitle屬性的HTML片段,用來(lái)顯示Portlet標(biāo)題。自定義區(qū)是一個(gè)包含tp=pPart屬性的HTML片段,用來(lái)顯示Portlet自定義區(qū).portlet內(nèi)容可以通過(guò)CreatPart。手柄區(qū)是一個(gè)包含tp=pHandler屬性的HTML片段,用來(lái)顯示Portlet標(biāo)題注意:由于一個(gè)頁(yè)面中可能會(huì)有多個(gè)portlet使用同一個(gè)樣式.為了節(jié)省資源,建議將Portlet的樣式中包含的css以及js腳本拆分成單獨(dú)的文件.這樣可以加快界面的加載速度.只需要將js和css剪貼到樣式設(shè)計(jì)中的css頁(yè)簽和js頁(yè)中即可.皮膚門戶的的皮膚目前支持藍(lán)色(webclassic)、紅色(webclassic_red)、綠色(webclassic_gree),它們?cè)趎chome下的hotwebs/porta/frame/themes目錄下:門戶高級(jí)功能本章內(nèi)容概要:登錄前后處理,指定登錄后頁(yè)面登錄鏈CA登錄域認(rèn)證第三方登錄門戶擴(kuò)展點(diǎn)門戶設(shè)置門戶FreeMarker擴(kuò)展門戶模塊配置登錄前后處理,指定登錄后頁(yè)面通過(guò)portal登錄,會(huì)訪問(wèn)index.jsp頁(yè)面,可以對(duì)登錄前后的操作進(jìn)行擴(kuò)展。這兩個(gè)方面擴(kuò)展說(shuō)明如下:登錄前的擴(kuò)展可以在index.jsp頁(yè)面中處理登錄前的邏輯,例如,當(dāng)IM登錄后,直接登錄Portal,而不進(jìn)入登錄頁(yè)面。登錄后的擴(kuò)展利用系統(tǒng)對(duì)請(qǐng)求的攔截,把邏輯寫在自己的頁(yè)面中,基本思路是,在登錄前請(qǐng)求自己的頁(yè)面,實(shí)現(xiàn)自己的邏輯。舉例如下(當(dāng)Portal登錄后自動(dòng)登錄IM)在index.jsp中請(qǐng)求window.location=“/portal/pt/oncelogin/loginIm”(登錄前);進(jìn)入登錄頁(yè)面執(zhí)行在Action的loginIm中實(shí)現(xiàn)登錄IM的邏輯。(登錄后)在上步中設(shè)定登陸后頁(yè)面,如跳轉(zhuǎn)到首頁(yè):(設(shè)置頁(yè)面)window.location=“/portal/pt/home/index”獲取請(qǐng)求來(lái)自的鏈接使用:request.getHeader("referer");登錄鏈登錄鏈?zhǔn)侵冈诘卿洉r(shí)對(duì)請(qǐng)求進(jìn)行一系列的校驗(yàn)鏈過(guò)濾,每個(gè)鏈完成自己的業(yè)務(wù)邏輯后釋放鏈。利用登錄鏈可以實(shí)現(xiàn)統(tǒng)一認(rèn)證的功能。實(shí)現(xiàn)思路如下:創(chuàng)建自己的登錄認(rèn)證鏈類,該類要繼承抽象類AbstractVerifyChain。覆蓋父接口IUserVerifyChain的執(zhí)行校驗(yàn)方法doVerify方法doVerify的處理流程如下:自己業(yè)務(wù)邏輯處理創(chuàng)建一個(gè)portal的安全認(rèn)證用戶進(jìn)行portal安全登陸
斷開(kāi)登陸校驗(yàn)鏈,代表登陸校驗(yàn)等過(guò)注:只有步驟a處理通過(guò)才會(huì)處理后續(xù)步驟,而通過(guò)與否取決與自己的業(yè)務(wù)邏輯。注冊(cè)創(chuàng)建的登陸認(rèn)證鏈類,在plugin.xml文件中添加即可。當(dāng)從其他業(yè)務(wù)系統(tǒng)跳轉(zhuǎn)或重定向到portal時(shí),portal會(huì)自動(dòng)調(diào)用步驟1創(chuàng)建的認(rèn)證鏈類的doVerify方法。步驟3校驗(yàn)通過(guò)后即可直接登錄到portal提供校驗(yàn)鏈類的模板如下:publicclass
登陸校驗(yàn)鏈名稱
extendsAbstractVerifyChain{
@Override
publicvoiddoVerify(HttpServletRequestrequest,VerifyAtomChainchain){
1:自己業(yè)務(wù)邏輯
該步驟屬于你們自己的處理邏輯,由你們?cè)O(shè)計(jì)實(shí)現(xiàn)。你們認(rèn)為校驗(yàn)通過(guò)就繼續(xù)走下邊步驟,否則返回即可.
2:創(chuàng)建一個(gè)portal的安全認(rèn)證用戶,如:AuthenticationUserVOuserVO=newAuthenticationUserVO();userVO.setUserID(userid);//用戶id可以在步驟1中獲取
3:進(jìn)行portal安全登陸
doLogin(userVO);
4:斷開(kāi)登陸校驗(yàn)鏈,代表登陸校驗(yàn)等過(guò)
if(hasLogin())
chain.doFilter(request);}根據(jù)以上實(shí)現(xiàn)步驟,現(xiàn)以具體實(shí)例進(jìn)行說(shuō)明:應(yīng)用場(chǎng)景:用戶登錄時(shí)在登陸界面選擇“保持登錄”復(fù)選框,portal將調(diào)用實(shí)現(xiàn)保持登陸功能的校驗(yàn)鏈KeepSessionLoinVerifyChain類。具體代碼:需要在plugin.xml文件中進(jìn)行擴(kuò)展的注冊(cè),示意如下:<extension-pointpoint="UserVerifyChain"title="門戶_用戶驗(yàn)證"classname="nc.uap.portal.user.chain.IUserVerifyChain"> …其它校驗(yàn)鏈的配置信息略過(guò)<extensionisactive="true"id="KeepSessionLoinVerifyChain"title="保持登錄驗(yàn)證"classname="nc.uap.portal.user.chain.KeepSessionLoinVerifyChain"/></extension-point>CA登錄門戶的CA驗(yàn)證配置與NC相同.配置方式參考NCCA.需要注意的是廠商要實(shí)現(xiàn)一個(gè)針對(duì)WEB的簽名接口nc.security.itf.IWebSigner并配置到caRegisterCenter.xml中.<caEntry><id>iTrusChina</id><name>天威誠(chéng)信</name><signerClsName>com.itrus.nc.security.ItrusSigner</signerClsName><verifyClsName>com.itrus.nc.security.ItrusVerify</verifyClsName><webSignerClsName>com.itrus.nc.web.WebSigner</webSignerClsName></caEntry>IWebSigner中需要實(shí)現(xiàn)的方法獲取初始化Activex腳本publicStringgetActivXObjectString();在獲取初始化ActiveX腳本中應(yīng)返回創(chuàng)建Activex對(duì)象的js/html片段.以及引入相應(yīng)的資源文件.資源文件可以放到NCHome/webapps/nc_web中.在此方法返回的HTML片段中可以以<scriptsrc=”/xxx/xx.js”></script>來(lái)引用資源文件獲取證書編號(hào)的js方法 publicStringgetCertSNJSMethod();門戶在做CA驗(yàn)證時(shí)候會(huì)使用這個(gè)方法來(lái)獲取證書編號(hào).門戶調(diào)用這個(gè)js方法的時(shí)候會(huì)傳入?yún)?shù)ncuserid.返回的時(shí)候只返回方法名,不需要后面的參數(shù).如果該方法獲取證書編號(hào)失敗.請(qǐng)拋出異常.獲取簽名方法 publicStringgetSignJSMethod();門戶在做CA驗(yàn)證時(shí)候會(huì)使用這個(gè)方法返回的javascript方法來(lái)對(duì)字符串進(jìn)行簽名,驗(yàn)證時(shí)會(huì)向這個(gè)javascript方法傳遞兩個(gè)參數(shù)challdata和ncid.challdata是要簽名的字符串.ncid是用戶id 獲取校驗(yàn)密碼的js方法 publicStringgetCheckPassWordJSMethod(); 獲取校驗(yàn)密碼的js方法.可選實(shí)現(xiàn) publicStringgetNCUserIdentifierJSMethod();域認(rèn)證第三方登錄第三方登錄是第三方系統(tǒng)要事先注冊(cè)令牌,每次對(duì)poratl的訪問(wèn)都要加上該令牌。從而實(shí)現(xiàn)免登錄的功能。注冊(cè)令牌說(shuō)明說(shuō)下:第三方系統(tǒng)要注冊(cè)令牌,需要借助ThirdPartyLoginHelper類的registerPtTrdauthVO方法,示例代碼如下: /** *注冊(cè)登錄令牌并返回登錄令牌號(hào) */publicstaticStringregisterPtTrdauthVO(PtTrdauthVOauth){ IPtThirdPartyLoginServicetpl=NCLocator.getInstance().lookup(IPtThirdPartyLoginService.class); try{ tpl.addAuth(auth); returnauth.getAkey(); }catch(PortalServiceExceptione){ returnnull; }}調(diào)用時(shí)需要傳給Portal一個(gè)PtTrdauthVO對(duì)象,對(duì)象屬性信息說(shuō)明如下:屬性名稱描述pk_trdauth主鍵pk_user用戶主鍵ttl有效期url目標(biāo)URLcreattime創(chuàng)建時(shí)間akey令牌號(hào)title標(biāo)題令牌使用說(shuō)明如下:第三方系訪問(wèn)時(shí)需要在連接后加上令牌號(hào),示例代碼如下:<ahref=”/portal/auth/test?2354adssa234fasfdaf”>test</a>Portal的ThirdPartyLoginServlet會(huì)處理第三方的登錄請(qǐng)求,根據(jù)令牌號(hào)去數(shù)據(jù)庫(kù)取PtTrdauthVO對(duì)象進(jìn)行鑒權(quán)。門戶擴(kuò)展點(diǎn)門戶提供的擴(kuò)展點(diǎn)有很多,比如:“門戶緩存處理”、“門戶登錄操作”、“門戶用戶驗(yàn)證”、“門戶消息集成”等。這里以門戶緩存處理為例,其它擴(kuò)展點(diǎn)類似。門戶緩存處理即緩存通知消息處理插件,主要處理通知消息的緩存和更新。擴(kuò)展點(diǎn)定義如下:publicinterfaceIPortalCacheClusterHandle{ publicstaticfinalStringPID="CacheClusterHandle"; /** *處理通知消息 *@parammessage */ publicvoiddoIt(ClusterCacheMessagemessage);}使用舉例如下:publicclassPortalCacheClusterHandleimplementsIPortalCacheClusterHandle{ @Override publicvoiddoIt(ClusterCacheMessagemessage){ Stringtype=message.getType(); Stringparam=message.getParam();…執(zhí)行更新緩存PortalServiceUtil.getPortletRegistryService().updateGroupCache(param,false);…PortalCacheManager.clearCache(cacheSpace,cacheKey);重新建立緩存}擴(kuò)展點(diǎn)綁定示例代碼如下:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><plugin>…<extension-pointpoint="CacheClusterHandle"title="門戶_緩存處理"classname="nc.uap.portal.core.cache.IPortalCacheClusterHandle"> <extensionisactive="true"id="portalCacheClusterHandle"title="Portal緩存處理"classname="nc.uap.portal.core.cache.impl.PortalCacheClusterHandle"/></extension-point>…</plugin>門戶設(shè)置門戶設(shè)置是通過(guò)門戶設(shè)置擴(kuò)展點(diǎn)IPortalSetting為門戶添加設(shè)置選項(xiàng),主要體現(xiàn)在登錄后頁(yè)面右上方“更多”按鈕,目前已實(shí)現(xiàn)擴(kuò)展點(diǎn)的擴(kuò)展內(nèi)容是:“集成憑據(jù)管理”、“修改密碼”、“語(yǔ)言設(shè)置”、“主題設(shè)置”、“皮膚設(shè)置”,“增加portlet”、“日志下載”,使用說(shuō)明如下:門戶設(shè)置定義如下:門戶設(shè)置擴(kuò)展點(diǎn)定義publicinterfaceIPortalSetting{ publicstaticfinalStringPID="PortalSetting";擴(kuò)展點(diǎn)id PtSettingVO[]getSettings();獲得設(shè)置項(xiàng)}Portal設(shè)置對(duì)象屬性說(shuō)明:屬性名稱描述i18nname國(guó)際化名稱url鏈接title標(biāo)題使用舉例:publicclassPtPortalSystemSettingimplementsIPortalSetting{@OverridepublicPtSettingVO[]getSettings(){returnnewPtSettingVO[]{…newPtSettingVO("themeSetting",“主題設(shè)置”,"themeSetting","/portal/pt/setting/themeList"),newPtSettingVO("watchlog",“日志下載”,"watchlog","/portal/app/mockapp/watchlog",Boolean.FALSE) … };}擴(kuò)展點(diǎn)綁定:在plugin.xml中配置門戶設(shè)置擴(kuò)展點(diǎn)“IPortalSetting”。<plugin>…<extension-pointpoint="PortalSetting"title="門戶_門戶設(shè)置"classname="m.setting.itf.IPortalSetting"><extensionisactive="true"id="portalIntegrateSetting"title="Portal集成設(shè)置"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年空調(diào)器用電動(dòng)機(jī)項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)拉弦式禮花行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年多功能切餅絲機(jī)項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)光亮清洗劑行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)高效氟吡甲禾靈數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年銅滑觸片項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年淡啤酒項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年基板式電源項(xiàng)目投資價(jià)值分析報(bào)告
- 寵物店裝修維修合同
- 培訓(xùn)機(jī)構(gòu)戰(zhàn)略合作協(xié)議書范本
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 《德育與班級(jí)管理》課程大綱
- 人教版八年級(jí)下冊(cè)英語(yǔ)全冊(cè)教案完整版教學(xué)設(shè)計(jì)含教學(xué)反思
- 邊坡腳手架搭設(shè)施工方案
- 網(wǎng)絡(luò)性能測(cè)試與分析課程教學(xué)大綱
- 國(guó)貨當(dāng)自強(qiáng)精品課件
- 比多少(課件)人教版一年級(jí)上冊(cè)數(shù)學(xué)
- 2021年懷化市會(huì)同縣人民醫(yī)院醫(yī)護(hù)人員招聘筆試試題及答案解析
- 《中華人民共和國(guó)職業(yè)分類大典》電子版
- 即興口語(yǔ)(姜燕)-課件-即興口語(yǔ)第二章PPT-中國(guó)傳媒大學(xué)
- “克勤克儉、厲行節(jié)約”PPT課件:如何過(guò)“緊日子”
評(píng)論
0/150
提交評(píng)論