Oracle ADF Knowledge
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-05-04 10:25:10 閱讀次數(shù):2486次
1.refresh : ifNeeded (region)
在1個(gè)a.jsff頁(yè)面里拖了1個(gè)taskflow b,b taskflow需要1個(gè)輸入?yún)?shù),從a.jsff對(duì)應(yīng)的manage bean里給這個(gè)參數(shù)傳值,
每次1在閱讀器調(diào)用這個(gè)b taskflow的頁(yè)面總是會(huì)報(bào)錯(cuò)說(shuō)這個(gè)參數(shù)是null.
解決辦法:在a.jsff里選中b這個(gè)taskflow,在它的屬性里設(shè)置 refresh : ifNeeded(當(dāng)有屬性甚么的變了才會(huì)refresh)
2.activation : conditional. active : true(el expression)
An ADF region must have an active state before it can invoke a task flow.
3.Popup里面的button,如果不設(shè)置成partialSubmit="true",點(diǎn)擊btn以后popup就自動(dòng)隱藏掉了。。
4.PQSEBModule.xml在DataModel的左側(cè)兒不顯示可以選的link是由于沒(méi)能連上db
5.在console上數(shù)據(jù)源建立最后1步要選是建在哪一個(gè)server上,不選的話(huà)就相當(dāng)于剛建的數(shù)據(jù)源沒(méi)用。
6.popup btn partialSubmit才不會(huì)自動(dòng)隱藏?
(partialSubmit="true"局部提交就不會(huì)去刷popup了,不設(shè)置的話(huà)1刷就把popup刷沒(méi)了)
7.子vo如果帶where連接的條件在事務(wù)提交以后子數(shù)據(jù)就查不出來(lái)了,提交事務(wù)之前可以查。
(提交之前數(shù)據(jù)都在session,都是通過(guò)最大的thera prdt vo和bean之間傳值轉(zhuǎn)換,根本就沒(méi)有重新去查ingredient這個(gè)子vo。而提交了事務(wù)以后,要重新去查vo,同時(shí)子vo也要重新查,子vo的where的參數(shù)沒(méi)有設(shè)值,所以查不出符合條件的子vo數(shù)據(jù))
{最外邊兒大vo最開(kāi)始加載的時(shí)候去查了db,子vo肯定也被查了,而以后的各種新增操作只是把數(shù)據(jù)塞到vo或bean里邊兒去,而沒(méi)有刷新的操作重新去查1遍大vo和子vo,所以事務(wù)提交之前數(shù)據(jù)可以查得到}
8.新建View link的時(shí)候,最后1步如果勾上了ApplicationModule的checkbox。在module的父子關(guān)系那兒,我從左側(cè)兒選中1個(gè)子vo,選到右側(cè)兒去,每次它都會(huì)給我重新創(chuàng)建1個(gè)父vo的實(shí)例。但我只需要新創(chuàng)建子vo的實(shí)例,不需要?jiǎng)?chuàng)建父vo的,所以不要勾上最后那個(gè)ckeckbox
9.提交事務(wù)的時(shí)候報(bào)錯(cuò):JBO⑵7023: Failed to validate all rows in a transaction。(應(yīng)當(dāng)是EO的驗(yàn)證沒(méi)有通過(guò),主鍵沖突之類(lèi)的,和事務(wù)的設(shè)置應(yīng)當(dāng)沒(méi)有關(guān)系)
但不知道具體是甚么錯(cuò),甚么驗(yàn)證沒(méi)有通過(guò)。加上下面的row的validate那1行,就會(huì)提示具體毛病了。
before commiting its necessary to validate the row.. That will fire all validations of EO
vo.insertRow(row);
row.validate();
appModule.getTransaction().commit();
Using this approach ADF Model layer will handle the error message and exception for you..
10.提交事務(wù):修改報(bào)錯(cuò)
JBO⑵7024: Failed to validate a row with key : . Error message parameters are {0=TdAddress, 1=oracle.jbo.Key[25898 ]}
緣由是prdtRow.setUpdatedTime(time);設(shè)置更新時(shí)間的時(shí)候這個(gè)時(shí)間的類(lèi)型是oracle.jbo.domain.Timestamp;而EO的這個(gè)字段類(lèi)型是java.sql.Timestamp; 把VO Row的類(lèi)型改成java.sql.Timestamp就行了。(EO和VO Row的類(lèi)型不1樣致使的)
11.默許table怎樣就隱藏了7列,選了全顯示,1刷新又回去了。。
由于我有的列設(shè)置了visible屬性,這7列是由于visible=false,正?,F(xiàn)象
12.q1:refresh設(shè)成defalt,現(xiàn)在居然也不報(bào)pojo bean is null的錯(cuò)了
q2:Samplingtab那個(gè)頁(yè)面,taskflow拖進(jìn)去不要refresh。而EditPrdtDetails那個(gè)taskflow拖進(jìn)去如果不refresh的話(huà),我的pojo bean就是null。why?
refresh就是去刷taskflow,SamplingTab里面拖得taskflow只是顯示1下我的vo的table,新增1行就多1行,提交事務(wù)就提交事務(wù),不用去刷的。而EditPrdtDetails那個(gè)taskflow被拖進(jìn)去的時(shí)候,會(huì)把外面頁(yè)面的bean作為輸入?yún)?shù)傳給EditPrdtDetails那個(gè)taskflow里面的pojo bean。最開(kāi)始默許的外面的bean是null,所以里面?zhèn)鬟^(guò)來(lái)的bean也是null。但點(diǎn)擊edit按鈕的時(shí)候外面的bean被在代碼里賦了值,但里面taskflow的bean還是null,由于沒(méi)有刷新這個(gè)taskflow。重新刷新1下就會(huì)重新履行1下這個(gè)賦值的進(jìn)程了。(先把外邊的值付給1個(gè)叫tdPrdtBean的變量,再把這個(gè)tdPrdtBean賦給pageFlowScope的tdPrdtBean,最開(kāi)始指向的都是null的地址,后來(lái)外面的變了變成有地址的了,后面的沒(méi)有隨著變;但如果都是同1個(gè)有值的地址了,外面的值變,里面的不用刷新應(yīng)當(dāng)就隨著自動(dòng)變了,這個(gè)測(cè)試就用1個(gè)直接new
Bean(),而不是默許null就能夠【傳的是地址!!!外面的地址變了,如果不(刷新)重新給里面的bean賦值新地址的話(huà),里面地址是不會(huì)隨著變的】)
--我的想法是對(duì)的!如果最開(kāi)始new的bean傳過(guò)去,以后不重新再new bean只是對(duì)里面的屬性操作,就不用refresh。
--注意:如果你不想重新履行這個(gè)taskflow的init方法也不要refresh。
--如果我設(shè)置了1個(gè)taskflow的activation : conditional. active : true(el expression),refresh : 設(shè)成default(不是ifNeeded),但是不報(bào)錯(cuò)null,why?
雖然初始化的時(shí)候外面的bean是null然后要傳給popup的pojo bean,但是這個(gè)時(shí)候taskflow的active屬性是false的,taskflow還沒(méi)有加載,所以null還沒(méi)有傳過(guò)去給pojo bean,而當(dāng)你在
點(diǎn)擊edit的按鈕方法中把taskflow的active設(shè)置成true的時(shí)候你也把bean給new了,這個(gè)時(shí)候才會(huì)履行taskflow輸入?yún)?shù)的傳值,所以再傳過(guò)去就不是null了。
(active賦值為true和new bean賦值,這2句的履行順序應(yīng)當(dāng)都無(wú)所謂的,只要都在同1個(gè)事件方法里,adf應(yīng)當(dāng)是先履行完你這個(gè)方法的所有語(yǔ)句,然后才去根據(jù)active=true去加載你的taskflow,
除非你在同方法里履行了顯示那個(gè)taskflow的popup的語(yǔ)句)
13.Post Change:調(diào)用方式和commit()1樣; vo.getApplicationModule().getTransaction().postChanges();就是把change(數(shù)據(jù)改動(dòng))post到
數(shù)據(jù)庫(kù)緩存中,
但是還沒(méi)有commit();相當(dāng)于在1個(gè)
數(shù)據(jù)庫(kù)的session中,履行了update操作但是不履行commit操作(這條數(shù)據(jù)是鎖住的),這個(gè)時(shí)候如果在另外一個(gè)
數(shù)據(jù)庫(kù)session中對(duì)同1條數(shù)據(jù)進(jìn)行操作的話(huà)就不能履行成功,由于這條數(shù)據(jù)處于鎖住狀態(tài),除非前面那個(gè)session履行了commit,這個(gè)session才能繼續(xù)履行。如果前面那個(gè)session沒(méi)有履行commit就直接關(guān)掉session了,那這條數(shù)據(jù)就鎖住了。
post change的作用:基于同1個(gè)EO建了2個(gè)VO,正常如果1個(gè)vo在頁(yè)面上數(shù)據(jù)進(jìn)行了改動(dòng)但沒(méi)有commit的話(huà),另外1個(gè)vo是查詢(xún)不到的。但如果第1個(gè)vo改動(dòng)后調(diào)用了postChange()方法,另外1個(gè)vo也就可以在頁(yè)面上查到了。它的作用相當(dāng)因而把原來(lái)在weblogic緩存的數(shù)據(jù)放到了
數(shù)據(jù)庫(kù)緩存中。
post change和
數(shù)據(jù)庫(kù)session類(lèi)似,如果用戶(hù)在頁(yè)面上輸入各種數(shù)據(jù),在popup里點(diǎn)擊了save按鈕,履行了post change(如果在post change后面也履行了commit不會(huì)有問(wèn)題),這個(gè)時(shí)候非popup的主頁(yè)面也能顯示這條數(shù)據(jù)(由于用的同1個(gè)EO and post change),但是如果用戶(hù)在主頁(yè)面沒(méi)有點(diǎn)擊按鈕履行commit而是直接關(guān)閉閱讀器的話(huà),這個(gè)session就被關(guān)掉了,修改的數(shù)據(jù)就都被鎖了!這時(shí)候就只能去
數(shù)據(jù)庫(kù)解鎖了。。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)