Tag:oracle ADF 11gR2
原创 muhongdi@163.com
需求:
每隔几秒钟保存一下用户输入的内容,字段不含验证,只是保存数据即可。
环境:
表一张,除Key外都是可以为空
对应的EO、VO、AM已生成
基本界面已生成,如下
实现方法:
1.定时调用ManageBean的方法
从ComponentPalette中找到Poll,拖到页面上
绑定PollListener到ManageBean的方法(如:#{AutoCommit.pollListener})
2.为Bindings添加Commit方法
3.回显最后保存时间
拖拽一个outputText(Active)到界面,用来回显最后保存时间
4.为了避免自动保存时inputText失去焦点,需要设置poll的immediate=true,所有输入组件的autoSubmit=true
其余ManageBean代码:
public class AutoCommit { public void pollListener(PollEvent pollEvent) { if (isViewDataDirty()) {//如果数据没有改动,则不执行提交 System.out.println("save_action"); save_action(); Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); this.message.setValue("最后保存时间:" + formatter.format(date)); } } public boolean isViewDataDirty() { ViewPortContext rootViewPort = ControllerContext.getInstance().getCurrentRootViewPort(); boolean uncommittedChanges = rootViewPort.isDataDirty(); return uncommittedChanges; } public String save_action() { BindingContainer bindings = getBindings(); OperationBinding operationBinding = bindings.getOperationBinding("Commit"); Object result = operationBinding.execute(); if (!operationBinding.getErrors().isEmpty()) { return null; } return null; } } |
效果
输入后控制台会输出save_action,没有动作不输出
自动保存时右上角的状态会闪一下
写在最后
1.次方案没有使用js代码,采用纯ADF public API实现,不必担心报脚本错误,并且升级ADF版本也不会有问题。
2.保存的时间间隔由poll组件的Interval来控制(ms),Interval越小调用服务器方法就越频繁,即使用户没有输入任何新内容也会占用一下网络。
3.界面上不要有validate,否则验证不通过会在界面上报红...
4.autoSubmit会在inputText失去焦点时执行