ADF How to 每隔几秒保存一次用户输入

Tag:oracle ADF 11gR2 

原创 muhongdi@163.com


需求:

每隔几秒钟保存一下用户输入的内容,字段不含验证,只是保存数据即可。

环境:

表一张,除Key外都是可以为空

对应的EOVOAM已生成

基本界面已生成,如下

实现方法:

1.定时调用ManageBean的方法

ComponentPalette中找到Poll,拖到页面上

绑定PollListenerManageBean的方法(如:#{AutoCommit.pollListener}

2.为Bindings添加Commit方法

3.回显最后保存时间

拖拽一个outputTextActive)到界面,用来回显最后保存时间

4.为了避免自动保存时inputText失去焦点,需要设置pollimmediate=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失去焦点时执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值