实现点击提交时校验信息并弹出确认提示框是否继续原创
5人赞赏了该文章
2,773次浏览
编辑于2023年07月01日 19:49:08
1、场景介绍:
在提交时,校验表单中的一些信息,如果不符合条件就需要弹出确认提示框,让其决定是否取消该次操作。
2、思路
1、通过操作插件实现:通过操作插件实现方式在最底部。
2、通过表单插件实现:可通过 beforeDoOperation 进行校验, 通过view弹出确认框。
3、实现
表单、列表分别需要一个插件
表单:
@Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); FormOperate opreate = (FormOperate) args.getSource(); switch (opreate.getOperateKey()) { case "submit": boolean isExceed = false; // 在此添加处理逻辑 // 判断是否处理过 String isDealed = this.getView().getPageCache().get("isDealed"); if (isExceed && !"true".equals(isDealed)) { // 取消原来的操作 args.setCancel(true); // 在用户点击确认框上的按钮后,系统会调用confirmCallBack方法 ConfirmCallBackListener confirmCallBackListener = new ConfirmCallBackListener("isExceed", this); // 设置页面确认框,参数为:标题,选项框类型,回调监听 this.getView().showConfirm("加班餐费超标,是否提交?", MessageBoxOptions.YesNo, confirmCallBackListener); // 只执行一次 this.getView().getPageCache().put("isDealed", "true"); } break; default: break; } } @Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); this.getView().getPageCache().remove("isDealed"); } @Override public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) { //判断回调参数id if ("isExceed".equals(messageBoxClosedEvent.getCallBackId())) { if (MessageBoxResult.Yes.equals(messageBoxClosedEvent.getResult())) { this.getView().invokeOperation("submit"); } else if (MessageBoxResult.No.equals(messageBoxClosedEvent.getResult())) { // 点击否也清除 this.getView().getPageCache().remove("isDealed"); } } }
列表:
@Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); FormOperate opreate = (FormOperate) args.getSource(); switch (opreate.getOperateKey()) { case "submit": ListSelectedRowCollection selectCols = args.getListSelectedData(); boolean isExceed = false; StringBuffer exceedMsg = new StringBuffer(); for (ListSelectedRow selectCol : selectCols) { // 在此添加处理逻辑 } String isDealed = this.getView().getPageCache().get("isDealed"); if (isExceed && !"true".equals(isDealed)) { exceedMsg.append("加班餐费超标,是否提交?"); // 取消原来的操作 args.setCancel(true); // 在用户点击确认框上的按钮后,系统会调用confirmCallBack方法 ConfirmCallBackListener confirmCallBackListener = new ConfirmCallBackListener("isExceed", this); // 设置页面确认框,参数为:标题,选项框类型,回调监听 this.getView().showConfirm(exceedMsg.toString(), MessageBoxOptions.YesNo, confirmCallBackListener); // 只执行一次 this.getView().getPageCache().put("isDealed", "true"); } break; default: break; } } @Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); // 清除 this.getView().getPageCache().remove("isDealed"); } @Override public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) { //判断回调参数id if ("isExceed".equals(messageBoxClosedEvent.getCallBackId())) { if (MessageBoxResult.Yes.equals(messageBoxClosedEvent.getResult())) { this.getView().invokeOperation("submit"); } else if (MessageBoxResult.No.equals(messageBoxClosedEvent.getResult())) { // 点击否也清除 this.getView().getPageCache().remove("isDealed"); } } }
实际可在操作插件中做确认提醒
public void onAddValidators(AddValidatorsEventArgs e) { super.onAddValidators(e); e.addValidator(new AbstractValidator() { public void validate() { ExtendedDataEntity[] dataEntities = this.getDataEntities(); this.addWarningMessage(dataEntities[0], json.getString("message")); } }); }
推荐阅读