1.refresh : ifNeeded (region)
在一个a.jsff页面里拖了一个taskflow b,b taskflow需要一个输入参数,从a.jsff对应的manage bean里给这个参数传值,
每次一在浏览器调用这个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上数据源建立最后一步要选是建在哪个server上,不选的话就相当于刚建的数据源没用。
6.popup btn partialSubmit才不会自动隐藏?
(partialSubmit="true"局部提交就不会去刷popup了,不设置的话一刷就把popup刷没了)
7.子vo如果带where连接的条件在事务提交之后子数据就查不出来了,提交事务之前可以查。
(提交之前数据都在session,都是通过最大的thera prdt vo和bean之间传值转换,根本就没有重新去查ingredient这个子vo。而提交了事务之后,要重新去查vo,同时子vo也要重新查,子vo的where的参数没有设值,所以查不出符合条件的子vo数据)
{最外边儿大vo最开始加载的时候去查了db,子vo肯定也被查了,而之后的各种新增操作只是把数据塞到vo或者bean里边儿去,而没有刷新的操作重新去查一遍大vo和子vo,所以事务提交之前数据可以查得到}
8.新建View link的时候,最后一步如果勾上了ApplicationModule的checkbox。在module的父子关系那儿,我从左边儿选中一个子vo,选到右边儿去,每次它都会给我重新创建一个父vo的实例。但我只需要新创建子vo的实例,不需要创建父vo的,所以不要勾上最后那个ckeckbox
9.提交事务的时候报错:JBO-27023: Failed to validate all rows in a transaction。(应该是EO的验证没有通过,主键冲突之类的,和事务的设置应该没有关系)
但不知道具体是什么错,什么验证没有通过。加上下面的row的validate那一行,就会提示具体错误了。
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-27024: 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的类型不一样导致的)
11.默认table怎么就隐藏了7列,选了全显示,一刷新又回去了。。
因为我有的列设置了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只是显示一下我的vo的table,新增一行就多一行,提交事务就提交事务,不用去刷的。而EditPrdtDetails那个taskflow被拖进去的时候,会把外面页面的bean作为输入参数传给EditPrdtDetails那个taskflow里面的pojo bean。最开始默认的外面的bean是null,所以里面传过来的bean也是null。但点击edit按钮的时候外面的bean被在代码里赋了值,但里面taskflow的bean还是null,因为没有刷新这个taskflow。重新刷新一下就会重新执行一下这个赋值的过程了。(先把外边的值付给一个叫tdPrdtBean的变量,再把这个tdPrdtBean赋给pageFlowScope的tdPrdtBean,最开始指向的都是null的地址,后来外面的变了变成有地址的了,后面的没有跟着变;但如果都是同一个有值的地址了,外面的值变,里面的不用刷新应该就跟着自动变了,这个测试就用一个直接new
Bean(),而不是默认null就可以【传的是地址!!!外面的地址变了,如果不(刷新)重新给里面的bean赋值新地址的话,里面地址是不会跟着变的】)
--我的想法是对的!如果最开始new的bean传过去,以后不重新再new bean只是对里面的属性操作,就不用refresh。
--注意:如果你不想重新执行这个taskflow的init方法也不要refresh。
--如果我设置了一个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句的执行顺序应该都无所谓的,只要都在同一个事件方法里,adf应该是先执行完你这个方法的所有语句,然后才去根据active=true去加载你的taskflow,
除非你在同方法里执行了显示那个taskflow的popup的语句)
13.Post Change:调用方式和commit()一样; vo.getApplicationModule().getTransaction().postChanges();就是把change(数据改动)post到数据库缓存中,
但是还没有commit();相当于在一个数据库的session中,执行了update操作但是不执行commit操作(这条数据是锁住的),这个时候如果在另一个数据库session中对同一条数据进行操作的话就不能执行成功,因为这条数据处于锁住状态,除非前面那个session执行了commit,这个session才能继续执行。如果前面那个session没有执行commit就直接关掉session了,那这条数据就锁住了。
post change的作用:基于同一个EO建了2个VO,正常如果一个vo在页面上数据进行了改动但没有commit的话,另外一个vo是查询不到的。但如果第一个vo改动后调用了postChange()方法,另外一个vo也就能在页面上查到了。它的作用相当于是把原来在weblogic缓存的数据放到了数据库缓存中。
post change和数据库session类似,如果用户在页面上输入各种数据,在popup里点击了save按钮,执行了post change(如果在post change后面也执行了commit不会有问题),这个时候非popup的主页面也能显示这条数据(因为用的同一个EO and post change),但是如果用户在主页面没有点击按钮执行commit而是直接关闭浏览器的话,这个session就被关掉了,修改的数据就都被锁了!这时就只能去数据库解锁了。。