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