程序员人生 网站导航

Oracle ADF Knowledge

栏目:互联网时间:2015-05-04 10:25:10

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就被关掉了,修改的数据就都被锁了!这时候就只能去数据库解锁了。。












------分隔线----------------------------
------分隔线----------------------------

最新技术推荐