Portal開發(fā) 1、WebLogic Portal的portlet開發(fā)步驟
Q: 能不能用portal administration來(lái)管理已經(jīng)在workshop中創(chuàng)建好的portal和在這個(gè)創(chuàng)建好的portal上的內(nèi)容,在無(wú)需創(chuàng)建新的portal的條件。也就是說原來(lái)portal不變,但是可以管理原來(lái)portal 中的部分內(nèi)容。能不能實(shí)現(xiàn)??行還是不行???為什么??
A: weblogic portal完整的開發(fā)過程有兩個(gè)步驟:一在workshop中進(jìn)行portlet和相關(guān)資源的開發(fā),二、在admin tools中以此為基礎(chǔ)進(jìn)行組裝 2、在workshop 中怎樣讓portlet使用新建的*.jpf 直接將你新建的JPF拖放到你的portal頁(yè)面上,就直接生成了jpf的portlet了 3、如何在weblogic portal中配置calender portlet 使用weblogic portal中的例子,需要完成以下步驟: 1。按照幫助系統(tǒng)中關(guān)于sample 的使用方法的提示將相應(yīng)的文件import進(jìn)自己的工程中。 2。在你安裝weblogic的時(shí)候有目錄\bea\weblogic81\portal\db\pointbase\44下有一個(gè)文件sample_portal_create_tables.sql在pointbase里面執(zhí)行它。 3。需要將web.xml中的相應(yīng)配置拷入到你的web.xml中如果你按照上面的步驟執(zhí)行,就沒有問題了。 4、如何把header.jsp和footer.jsp拖到相應(yīng)的位置 在portal8.1可head和footed位置是由shell文件控制的,你可以為一個(gè)desktop選擇一個(gè)shell文件,比如samportal中缺省的為header FooterVisitor.shell : <?xml version="1.0" encoding="UTF-8"?> <netuix:markupDefinition xmlns:netuix="http://www./servers/netuix/xsd/controls/netuix/1.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://www./servers/netuix/xsd/controls/netuix/1.0.0 markup-netuix-1_0_0.xsd"> <netuix:locale language="en"/> <netuix:markup> <netuix:shell title="Header-Footer Visitor Shell" description="A header with a link and footer is included in this shell." markupType="Shell" markupName="headerFooterVisitor"> <netuix:head/> <netuix:body> <netuix:header> <netuix:jspContent contentUri="/portlets/header/header.jsp"/> </netuix:header> <netuix:break/> <netuix:footer/> </netuix:body> </netuix:shell> </netuix:markup> </netuix:markupDefinition> 5、在Portal 7.0中怎樣在usermgt.jar中指向一個(gè)新生成EntityPropertyManager 修改ejb-jar.xml and weblogic-ejb-jar.xml. 在ejb-jar.xml中添加; <ejb-ref> <ejb-ref-name>ejb/LdapPropertyManager</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.bea.p13n.property.EntityPropertyManagerHome</home> <remote>com.bea.p13n.property.EntityPropertyManager</remote> </ejb-ref> 在weblogic-ejb-jar.xml也作對(duì)應(yīng)的修改就可以了
在http://dev2dev./codelibrary/code/unified_up.jsp有一wlp7.0的例子你可以看看 6、請(qǐng)問workshop開發(fā)的portlet是否能移植到websphere portal上? bea portal支持jsr-168,如果用jsr-168寫portal移植應(yīng)該沒問題,但是很多是用java page flow,估計(jì)要等到標(biāo)準(zhǔn)化以后才能移植 7、Portal與Portlet中的Session與Request Q: 在編寫Portlet的時(shí)候,如果用session.setAttribute(),這個(gè)變量可以在各個(gè)Portlet中共享,有沒有辦法能夠讓session局限與一個(gè)portlet之內(nèi),也就是在一個(gè)portlet的頁(yè)面流中,我如何傳遞自己的參數(shù),別的portlet又看不到。request也是同樣
A: session本來(lái)就是用來(lái)在一段回話中共享數(shù)據(jù)得,你這樣的要求似乎太為難大家伙了。實(shí)在不行就在session中設(shè)定標(biāo)志位區(qū)別吧;request的話,好像本來(lái)就是可以的吧,看看這個(gè): <%@page import="com.bea.wlw.netui.pageflow.scoping.ScopedServletUtils"%> <% HttpServletRequest outerRequest = ScopedServletUtils.getOuterRequest( request ); %> 8、關(guān)于SSO和Weblogic Portal 本文討論的只是基于Web的其他應(yīng)用系統(tǒng)與的Weblogic Portal的SSO。 一、應(yīng)用系統(tǒng)的驗(yàn)證 提到SSO,就不能不提到其他基于Web應(yīng)用系統(tǒng)的身份驗(yàn)證。我們透過現(xiàn)象看本質(zhì),看看基于Web的身份驗(yàn)證的實(shí)質(zhì)是什么。 無(wú)論后端是什么系統(tǒng),例如Lotus Domino,BO等等,其實(shí),基于Web的身份驗(yàn)證的實(shí)質(zhì)無(wú)外乎就是有一個(gè)表單(FORM),表單里面讓用戶輸入用戶名稱和密碼,然后提交給驗(yàn)證的頁(yè)面(Form中的action指定的),通過身份驗(yàn)證后,通過Session來(lái)儲(chǔ)存用戶的一些信息,然后每次訪問頁(yè)面時(shí),從session里面讀這些信息,如果存在,則進(jìn)入登錄后的界面,否則,就認(rèn)為沒有登錄。 而Session的機(jī)制呢,我想大多數(shù)人都應(yīng)該知道,它是與Domain還有Path相關(guān)的,是存儲(chǔ)在服務(wù)器端的,服務(wù)器如何知道當(dāng)前瀏覽器或者客戶端對(duì)應(yīng)的是哪個(gè)Session呢,主要是通過Cookie中的sessionid來(lái)對(duì)應(yīng)的,session是有失效時(shí)間的,服務(wù)器一般都可以設(shè)置,也可以通過程序來(lái)設(shè)置。 Cookie的生命周期可以是一關(guān)閉瀏覽器就滅亡,也可以設(shè)置存在的時(shí)間,如果設(shè)置了存在的時(shí)間,就會(huì)以文件的方式存在于客戶端,當(dāng)客戶端再訪問服務(wù)器時(shí),可以通過Domain對(duì)應(yīng)關(guān)系從Cookie中讀取相應(yīng)的信息,一般我們?cè)谄渌W(wǎng)站時(shí),登錄時(shí)如果設(shè)置了自動(dòng)登錄或者記錄多長(zhǎng)時(shí)間,就是使用的Cookie,一般會(huì)在Cookie中存儲(chǔ)登錄的用戶名稱和密碼的密文,訪問網(wǎng)站時(shí),它如果讀取到這些信息,就會(huì)使用這些信息自動(dòng)登錄了。 所以可以看出,無(wú)論對(duì)于什么Web應(yīng)用程序,如果該瀏覽器曾經(jīng)登錄過,服務(wù)器端生成了session,客戶端Cookie中記錄了SessionID,該瀏覽器沒有關(guān)閉,那么,即便該瀏覽器訪問其他的站點(diǎn)后,再回到該應(yīng)用系統(tǒng),如果Session沒有失效,那么應(yīng)用程序還會(huì)認(rèn)為你是登錄的。 而對(duì)于身份驗(yàn)證的頁(yè)面,一般是不做判斷,判斷你的用戶名稱和密碼是通過POST,還是URL中參數(shù)方式提交的。除此以外,有的應(yīng)用程序會(huì)從URL中參數(shù)判斷你是否登錄,這種方式由于不安全目前已經(jīng)應(yīng)用不多,早些年很多門戶網(wǎng)站的郵件就是這種機(jī)制,用戶登錄時(shí)會(huì)根據(jù)一些特性生成一個(gè)很長(zhǎng)的字符串,通過該字符串來(lái)判斷是否登錄了,所以當(dāng)時(shí)會(huì)發(fā)生,如果在另外一臺(tái)機(jī)器上拷貝了該URL,也會(huì)進(jìn)入郵箱的情況。 還有一種特殊情況,這是HTTP協(xié)議支持的,就是BASIC認(rèn)證方式,它會(huì)在用戶初次訪問時(shí)彈出對(duì)話框,用戶輸入用戶名和密碼后,瀏覽器會(huì)記住,然后每次HTTP請(qǐng)求時(shí),在Header里面將用戶名稱和密碼的BASE64位形式傳給服務(wù)器,服務(wù)器就會(huì)知道該用戶的身份了,之所以在這里單獨(dú)提出這種方式,是因?yàn)橄挛慕榻B的自己編寫的SSO實(shí)現(xiàn)很難對(duì)付這種驗(yàn)證方式,所以,如果后端系統(tǒng)(例如Lotus Domino)同時(shí)也支持Form身份驗(yàn)證,就需要改過來(lái),如果不支持或者不能改過來(lái),將是很棘手的一件事情。
二、SSO的實(shí)現(xiàn)-第三方產(chǎn)品 本節(jié)討論的是基于第三方產(chǎn)品實(shí)現(xiàn)SSO。 目前,有很多產(chǎn)品支持SSO,使用Weblogic Portal,我們也主張用戶使用這些產(chǎn)品,因?yàn)樗麄兡軌蚝芎玫耐ㄟ^配置,甚至是自學(xué)習(xí)的方式實(shí)現(xiàn)SSO,開發(fā)者需要完成的工作很少。 這些產(chǎn)品,一般實(shí)現(xiàn)的方式有兩類:第一類是通過Agent的方式,即在后端每個(gè)Web應(yīng)用系統(tǒng),或者其他系統(tǒng)都安裝一個(gè)Agent,由Agent來(lái)接管該系統(tǒng)的身份驗(yàn)證和訪問控制,同時(shí),需要有一臺(tái)策略服務(wù)器,里面會(huì)放置Weblogic Portal的用戶信息,以及這些用戶與其他系統(tǒng)的用戶對(duì)應(yīng)信息,當(dāng)然,Weblogic Portal也可以繼續(xù)保留自己的用戶,該策略服務(wù)器只是存放了用戶的對(duì)應(yīng)關(guān)系。這類產(chǎn)品對(duì)于不同的系統(tǒng),Agent不同,這些Agent能夠通過配置,輕松的接管了后面的系統(tǒng)的身份驗(yàn)證和訪問控制,所以,舉例來(lái)說,如果Portal中用戶A對(duì)應(yīng)系統(tǒng)1中的用戶B,那么策略服務(wù)器中有此配置后,當(dāng)從Portal訪問系統(tǒng)1時(shí),系統(tǒng)1的agent能夠辨別portal用戶A,就可以知道該系統(tǒng)對(duì)應(yīng)的用戶是B,讓系統(tǒng)認(rèn)為當(dāng)前用戶就是B,然后使用B的身份來(lái)訪問和操作系統(tǒng)1。這類產(chǎn)品的使用方式還可以是,通過一個(gè)統(tǒng)一的LDAP,存放企業(yè)內(nèi)部的用戶信息,然后通過策略服務(wù)器,控制了后端所有系統(tǒng)的URL訪問權(quán)限,這樣也實(shí)現(xiàn)了單點(diǎn)登錄。 這種方式的優(yōu)點(diǎn)是:策略服務(wù)器不會(huì)存儲(chǔ)其他系統(tǒng)的密碼,密碼還是保存在各個(gè)系統(tǒng)中,同時(shí),各個(gè)系統(tǒng)的訪問都由Agent控制,用戶必須經(jīng)過Portal作為入口,同時(shí),可以通過策略服務(wù)器靈活的配置訪問控制。缺點(diǎn)在于:需要在各個(gè)系統(tǒng)安裝Agent;對(duì)于沒有Agent的系統(tǒng),需要通過安裝Web Agent,然后進(jìn)行一定的編碼實(shí)現(xiàn);Portal作為單一入口,一旦當(dāng)機(jī),無(wú)法訪問后臺(tái)系統(tǒng)。缺點(diǎn)解決:Weblogic Portal可以通過構(gòu)建集群實(shí)現(xiàn)負(fù)載均衡和容錯(cuò),避免單點(diǎn)故障。
第二類是通過Proxy的方式,即具有一個(gè)Proxy Server,由它來(lái)接管對(duì)于后端系統(tǒng)的訪問,提交請(qǐng)求和讀取數(shù)據(jù),然后再返回給Portal,同時(shí)也有一個(gè)LDAP服務(wù)器或者策略服務(wù)器,該服務(wù)器可以存放用戶信息以及用戶的對(duì)應(yīng)關(guān)系。Proxy Server的作用是接收Portal的請(qǐng)求,提交給后端系統(tǒng),然后將返回的數(shù)據(jù)再寫給Portal,Proxy Server會(huì)通過存儲(chǔ)的用戶對(duì)應(yīng)關(guān)系和用戶名和密碼,自動(dòng)完成后端系統(tǒng)的登錄,然后就象一個(gè)瀏覽器一樣,提取數(shù)據(jù),返回?cái)?shù)據(jù)給后端系統(tǒng)。 該方法的優(yōu)點(diǎn)是:后端系統(tǒng)不用做任何改動(dòng)。即便是沒有Portal,其他系統(tǒng)還可以照常使用。缺點(diǎn)是:需要在策略服務(wù)器中存儲(chǔ)用戶名稱和密碼,密碼會(huì)多處存放,同步困難;用戶可以繞開Portal,直接訪問后端系統(tǒng)。Proxy Server可能是單點(diǎn)故障。 缺點(diǎn)解決:目前有密碼同步產(chǎn)品;Proxy Server也大多支持集群。
由以上兩種方式可以看出,哪種方式的編程量都不是很大,大多可以通過配置來(lái)實(shí)現(xiàn),而且功能也很強(qiáng)大,例如第一節(jié)說的BASIC登錄方式,這些產(chǎn)品都支持。而Weblogic Portal通過其支持多身份驗(yàn)證提供者,以及良好的開發(fā)框架等的特點(diǎn),能夠完全支持這兩種方式。如果客戶銀子大把,優(yōu)先應(yīng)該考慮使用第三方產(chǎn)品。
可是如果客戶預(yù)算不大,后端系統(tǒng)又不多,有什么解決方法呢?答案當(dāng)然是有,但不是萬(wàn)能的。
三、Weblogic Portal的用戶 提到SSO,就不能不說說Weblogic Portal的用戶信息。作為一個(gè)統(tǒng)一,簡(jiǎn)單,可擴(kuò)展的企業(yè)級(jí)應(yīng)用平臺(tái)Weblogic Platform中的一部分,Weblogic Portal被容納在Weblogic Platform統(tǒng)一的安全框架中,它使用的用戶和組,就是weblogic Server的用戶和組,但是與Weblogic Server不同的是,它的角色是Portal特有的,與Server是完全不同意義的,需要注意不要混淆了。 Weblogic Server安裝后缺省時(shí)是使用自帶的內(nèi)嵌的LDAP來(lái)進(jìn)行用戶,組和角色的管理的,在身份驗(yàn)證提供者中,有一個(gè)DefaultAuthenticator,就是對(duì)這部分用戶,組和角色來(lái)進(jìn)行管理的提供者。 Weblogic Portal8.1.3可以支持多個(gè)用戶身份驗(yàn)證提供者,配置是在Server的控制臺(tái)中進(jìn)行,在Weblogic Portal的管理工具中,在管理用戶和組的時(shí)候,可以在多個(gè)安全提供者之間切換,進(jìn)行管理。 在Weblogic Server控制臺(tái)中,點(diǎn)擊Security > Realms > myrealm> Authentication Providers,可以看到DefaultAuthenticator,同時(shí),還能看到可以新建很多種類的身份驗(yàn)證提供者,包括: Configure a new Default Identity Asserter... Configure a new MedRec Sample Authenticator... Configure a new Open LDAPAuthenticator... Configure a new Novell Authenticator... Configure a new iPlanet Authenticator... Configure a new RDBMSAuthenticator... Configure a new Default Authenticator... Configure a new Realm Adapter Authenticator... Configure a new WSRPIdentity Asserter... Configure a new LDAPX509Identity Asserter... Configure a new Active Directory Authenticator... 可以看到,Weblogic Server可以配置使用多種主流的LDAP服務(wù)器來(lái)存儲(chǔ)用戶和組,同時(shí),也支持?jǐn)?shù)據(jù)庫(kù)和AD。通過設(shè)置,可以指定使用哪個(gè)身份驗(yàn)證提供者作為缺省的。也可以設(shè)置多個(gè)Provider直接的驗(yàn)證關(guān)系如何。 本文中不會(huì)對(duì)如何配置進(jìn)行說明,感興趣的朋友,可以查閱Weblogic Server關(guān)于Security的相關(guān)的幫助。使用數(shù)據(jù)庫(kù)作為驗(yàn)證,可以參見筆者另外一個(gè)帖子: http://dev2dev./bbs/thread.jspa?forumID=101&threadID=18563
由此可以看到,如果客戶需要的SSO指的就僅僅是,能夠使用他們企業(yè)內(nèi)部已有的LDAP或者AD用戶,進(jìn)行Weblogic Portal登錄和身份驗(yàn)證的話,那么,只要配置多個(gè)身份驗(yàn)證提供者就可以了,就可以使用那些已經(jīng)存在的用戶。但是,如果客戶需要的SSO并不局限于此,還需要在Portal上登錄以后,再訪問其他一些基于Web的應(yīng)用系統(tǒng)時(shí),就不需要重復(fù)輸入用戶名和密碼和重復(fù)登錄了,那么,僅僅通過配置是無(wú)法實(shí)現(xiàn)的。即便那些系統(tǒng)和Portal理想狀態(tài)下都使用相同的LDAP或者AD用戶,由于每個(gè)系統(tǒng)驗(yàn)證用戶是否登錄以后的機(jī)制不同,還是需要進(jìn)行定制開發(fā)的。
四、自己開發(fā)實(shí)現(xiàn)SSO Portal作為統(tǒng)一的入口,將其他基于Web的應(yīng)用集成到Portal中,方式可以是多種多樣的,最簡(jiǎn)單的是Portal上提供鏈接,直接打開其他系統(tǒng)的界面,進(jìn)行操作;再?gòu)?fù)雜一點(diǎn)的就是通過Frame或者Iframe的方法,將其他系統(tǒng)的界面嵌入到Portal中,但實(shí)質(zhì)還是使用其他系統(tǒng)的界面,Portal只是從大范圍(例如包含了其他應(yīng)用的Portlet)來(lái)控制用戶的訪問權(quán)限,這兩種主要解決的就是能夠繞過其他系統(tǒng)的登錄,然后讓其他系統(tǒng)能夠識(shí)別當(dāng)前用戶的對(duì)應(yīng)身份,至于其他系統(tǒng)內(nèi)部自己的個(gè)性化,權(quán)限等,還是由各個(gè)系統(tǒng)自己控制的。Weblogic Portal的Web應(yīng)用集成還有其他方式,例如通過web clipping的方式,生成Portlet;或者通過HttpControl,取得Http回應(yīng)的內(nèi)容,組成Portlet;或者完全使用后端系統(tǒng)的API,重構(gòu)Web內(nèi)容,例如通過Lotus Domino的API,訪問Lotus Domino的數(shù)據(jù)庫(kù),直接讀取視圖或者文檔的信息等。但這幾種方式都已經(jīng)不再使用原來(lái)的系統(tǒng)界面,所以,涉及的內(nèi)容在本文SSO討論中沒有包括。本節(jié)討論的就是開始時(shí)提到的兩種方式如何解決。 經(jīng)過前面身份驗(yàn)證,Session,Cookie等方面的說明,我想,很多人大概已經(jīng)知道如何自己編寫程序來(lái)實(shí)現(xiàn)簡(jiǎn)單的SSO了,在論壇上筆者也看到有的朋友這樣做了,其實(shí)說來(lái)很簡(jiǎn)單: 1、在數(shù)據(jù)庫(kù)或者LDAP中存儲(chǔ)Portal用戶和其他系統(tǒng)用戶的對(duì)應(yīng)關(guān)系,包括其他系統(tǒng)用戶名稱和密碼,根據(jù)不同系統(tǒng)的驗(yàn)證特點(diǎn),有的可能還要存儲(chǔ)密碼的密文形式。 2、在Portal登錄時(shí),或者在切換到其他系統(tǒng)時(shí),通過Iframe將用戶名稱和密碼通過URL傳遞過去,進(jìn)行后端的登錄。 以后端系統(tǒng)為Dev2dev.為例,可以通過查看登錄頁(yè)面的源文件,知道Form的action是login.jspa,那么,當(dāng)Portal用戶驗(yàn)證正確以后,可以在頁(yè)面中加入 <iframe width=1 height=1 src=‘http://dev2dev./bbs/login.jspa?username=YOURUSERNAME&password=YOURPASSWORD‘></iframe> <a href="http://dev2dev./bbs/settings!default.jspa">Dev2dev.</a> 將上面的YOURUSERNAME和YOURPASSWORD替換為Portal用戶對(duì)應(yīng)的用戶名稱和密碼,打開頁(yè)面后,點(diǎn)擊該鏈接,可以看到,當(dāng)前用戶已經(jīng)是登錄以后的身份。 當(dāng)然,可以去掉下面的連接,直接設(shè)置iframe的width和height為足夠大,就可以將dev2dev.包括在其中。 以上應(yīng)該是一個(gè)JSP頁(yè)面(因?yàn)槟阋獎(jiǎng)討B(tài)的設(shè)置名稱和密碼),通過該JSP頁(yè)面產(chǎn)生Portlet,就可以嵌入到Portal中,正如我們前面所說,你不能通過Portal控制你登錄以后的樣式,個(gè)性化等屬性,但是你可以通過控制用戶訪問該P(yáng)ortlet的權(quán)限,從而實(shí)現(xiàn)Portal內(nèi)高層次的個(gè)性化和顯示控制。(其實(shí),通過JavaScript,也完全可以改變Iframe中的內(nèi)容和樣式,這個(gè)超出本文的主題,略過) 以上就是一個(gè)SSO的自己編程的簡(jiǎn)單實(shí)現(xiàn),但是,這種方法具有很多需要注意的地方和局限性: 1、對(duì)方的登錄表單,可能不僅僅是傳遞了用戶名稱和密碼,可能還有其他的參數(shù),需要多次嘗試,如果能夠看到對(duì)方驗(yàn)證的代碼最好。 2、對(duì)方有可能進(jìn)行了Form是POST還是GET提交的判斷(例如,驗(yàn)證頁(yè)面是Servlet),如果一定需要使POST,那么可以使iframe中src是一個(gè)相同的form表單,action指向?qū)Ψ降尿?yàn)證頁(yè)面,然后,通過Javascript,進(jìn)行隱式提交;更有甚者,有的驗(yàn)證頁(yè)面還判斷了是否是本服務(wù)器提交的請(qǐng)求,那么,就要嵌入對(duì)方的登錄表單,然后在iframe所在的頁(yè)面內(nèi),通過Javascript使iframe內(nèi)的頁(yè)面提交,完成登錄。 3、有的系統(tǒng)為了安全,密碼傳輸前已經(jīng)在客戶端通過Javascript進(jìn)行了加密,注意檢查。 4、有的系統(tǒng)很特別,一定要在瀏覽器的_top窗口中進(jìn)行驗(yàn)證,或者驗(yàn)證以后在_top中打開后繼的頁(yè)面,對(duì)于這種系統(tǒng),請(qǐng)修改對(duì)方的程序,否則很難解決。筆者曾經(jīng)就遇見過此類案例,嘗試多次無(wú)果,幸好后來(lái)發(fā)現(xiàn)對(duì)方系統(tǒng)能夠設(shè)置后繼的頁(yè)面,將后繼的頁(yè)面設(shè)置為Portal,再轉(zhuǎn)回Portal才可以。 5、Portal用戶會(huì)和多個(gè)系統(tǒng)的用戶有對(duì)應(yīng)關(guān)系,需要設(shè)計(jì)一個(gè)好的數(shù)據(jù)結(jié)構(gòu),如果后端系統(tǒng)為多個(gè),不一定非要在Portal登錄驗(yàn)證后隱式登錄所有的系統(tǒng),可以在需要顯示哪個(gè)系統(tǒng)時(shí),再隱式登錄。
五、小結(jié) 以上就是個(gè)人關(guān)于SSO和Weblogic Portal的實(shí)現(xiàn)的一些看法,經(jīng)驗(yàn)和心得體會(huì),希望能對(duì)相關(guān)朋友有所幫助。值得一提的是,Weblogic Portal通過Portlet源的多樣性和靈活性,為自己開發(fā)編程實(shí)現(xiàn)SSO,提供了強(qiáng)有力的支持。 9、Weblogic Portal8.1中實(shí)現(xiàn)分頁(yè)顯示 我們現(xiàn)在至少有三種以上的方案可以解決: 1、在JSP頁(yè)面上用netui:anchor 來(lái)實(shí)現(xiàn)頁(yè)面到action的跳轉(zhuǎn),在action中進(jìn)行處理之后,在回到本頁(yè)面。 2、如果將代碼寫到JSP中,我們可以通過取得當(dāng)前的page的com.bea.portlet.PostbackURL 來(lái)進(jìn)行定位。 3、參考workshop中由Control自動(dòng)創(chuàng)建的JPF中的實(shí)現(xiàn)方式。
第一種方案思路如下: 頁(yè)面流開始,在Action中取出所有要顯示的數(shù)據(jù),分頁(yè),并顯示第一頁(yè)。當(dāng)在jsp中點(diǎn)擊第二頁(yè)時(shí),頁(yè)面流回到Action,在Action中首先得到頁(yè)數(shù),然后計(jì)算第二頁(yè)應(yīng)該load的數(shù)據(jù),并load這些數(shù)據(jù),然后跳向原先的jsp,但是在這個(gè)jsp中綁定的數(shù)據(jù)已經(jīng)是第二頁(yè)的數(shù)據(jù)了。 代碼詳見:testpageflow 第二種方案思路: <% PostbackURL url = PostbackURL.createPostbackURL(request, response); int i = 1; while(i<10) { url.removeParameter("page"); url.addParameter("page",new Integer(i).toString()); %> <a href=<%=url%>>第<%=i%>頁(yè)</a> <% i++; } %> 當(dāng)jsp,自己調(diào)用自己的時(shí)候,url地址不要寫文件名,而是利用portlet的類,根據(jù)當(dāng)前環(huán)境(request & response)先創(chuàng)建一個(gè)url,然后跳轉(zhuǎn)到這個(gè)url,置于不同頁(yè)需要不同的參數(shù)(page)值,則在代碼中使用url. addParameter方法,注意在add之前最好先清一下Parameter,否則可能加得很長(zhǎng)。 代碼詳見:pageTest.jsp Java page flow 是基于strus的,建議將邏輯代碼都寫到action中,使用workshop提供的NetUI,一般的功能都可以實(shí)現(xiàn)。在jsp中盡量不寫代碼,盡量不要jsp之間直接跳轉(zhuǎn)。
以上兩個(gè)例子您可以直接拖入您的工程,可以直接運(yùn)行。形成portlet放入portal后也測(cè)試過了。 第三種方案思路:參考workshop中由Control自動(dòng)創(chuàng)建的JPF中的實(shí)現(xiàn)方式。 附件: http://dev2dev./bbs/servlet/D2DServlet/download/101-12443-65787-523/說明及實(shí)例.rar |
|
來(lái)自: smoking_boy > 《我的圖書館》