NC65 按钮拦截器

需求:在业务上 有些代码的校验 需要在按钮事件执行前 或者是按钮正常执行后 去执行

           这个时候 就需要添加拦截器(ActionInterceptor)

          不过另外思路就是重载按钮类 doAction里面重写  比如说 自定义删除类 

          跟平时的自定义按钮类似 只是继承的父类不同  参考链接:https://mp.csdn.net/postedit/82658874

实现方式如下:

         举例:修改拦截器

         客户需求:点击修改时 如果说当前单据自定义项16已存在值 那么提示 不能修改

                             否则 正常处理

1、新建一个类 EditOADjtbInterceptor.java 继承 ActionInterceptor

2、继续父类方法说明:

      a) afterDoActionFailed  方法意思:按钮执行失败后执行

      b) afterDoActionSuccessed 方法意思:按钮执行成功后执行

      c) beforeDoAction 方法意思:按钮执行前执行 (符合客户需求)

3、代码案例: 

package nc.ui.fdgyl.oafypz.action;

import java.awt.event.ActionEvent;

import javax.swing.Action;

import nc.bs.framework.common.NCLocator;
import nc.itf.fdgyl.IFdDBService;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.pubapp.uif2app.query2.model.IModelDataManager;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.ui.uif2.actions.ActionInterceptor;
import nc.ui.uif2.model.AbstractAppModel;

/**
 * 修改方法拦截器
 * @author yjw
 * 
 */

public class EditOADjtbInterceptor implements ActionInterceptor {
	private AbstractAppModel model;
	private ShowUpableBillForm editor;
	private IModelDataManager dataManager;

	@Override
	public boolean afterDoActionFailed(Action arg0, ActionEvent arg1,
			Throwable arg2) {
		return false;
	}

	@Override
	public void afterDoActionSuccessed(Action arg0, ActionEvent arg1)
	{
	}

	public IModelDataManager getDataManager() {
		return this.dataManager;
	}

	public void setDataManager(IModelDataManager dataManager) {
		this.dataManager = dataManager;
	} 
	
	@Override
	public boolean beforeDoAction(Action arg0, ActionEvent arg1) {
		
		String nc_pzdate = getEditor().getBillCardPanel().getHeadItem("vdef16").getValue();
		if(nc_pzdate!=null&&nc_pzdate.length()>0)
		{
			MessageDialog.showWarningDlg(getEditor(), "提示", "当前单据已生成凭证,不能修改!\n请重新选择!");
			return false;
		}
		String nc_pzh = getEditor().getBillCardPanel().getHeadItem("nc_pzh").getValue();
		if(nc_pzh!=null&&nc_pzh.length()>0)
		{
			MessageDialog.showWarningDlg(getEditor(), "提示", "当前单据已生成凭证,不能修改!\n请重新选择!");
			return false;
		}
		String nc_jsdate = getEditor().getBillCardPanel().getHeadItem("vdef13").getValue();
		if(nc_jsdate!=null&&nc_jsdate.length()>0)
		{
			MessageDialog.showWarningDlg(getEditor(), "提示", "当前单据已生成付款结算单,不能修改!\n请重新选择!");
			return false;
		}
		return true;
	}

	public ShowUpableBillForm getEditor() {
		return editor;
	}

	public void setEditor(ShowUpableBillForm editor) {
		this.editor = editor;
	}

	public AbstractAppModel getModel() {
		return model;
	}

	public void setModel(AbstractAppModel model) {
		this.model = model;
	}
}

4、配置文件添加 即把拦截器添加到按钮下

<!--======= 动作:[newActions] [修改] ===========-->
<bean id="editAction" class="nc.ui.pubapp.uif2app.actions.EditAction">
	<property name="model"><ref bean="bmModel"/></property>
	<property name="interceptor">
		<bean class="nc.ui.pubapp.uif2app.actions.interceptor.CompositeActionInterceptor">
			<property name="interceptors">
				<list>
					<bean              class="nc.ui.pubapp.uif2app.actions.interceptor.ShowUpComponentInterceptor">
						<property name="showUpComponent" ref="billForm" />
					</bean>
					<!--此处可以扩展添加自己的拦截器-->
					<!--此处可以扩展添加自己的拦截器-->
					<bean class="nc.ui.fdgyl.oafypz.action.EditOADjtbInterceptor">
					    <property name="model"><ref bean="bmModel"/></property>
						<property name="editor"><ref bean="billForm"/></property>
					    <property name="dataManager"><ref bean="bmModelModelDataManager"/></property>
					</bean>
				</list>
			</property>
		</bean>
	</property>
	<property name="exceptionHandler"><ref bean="exceptionHandler" /></property>
</bean>

注:此部分 有2个拦截器:第一 为修改跳编辑态拦截器 (系统)  第二  是开发拦截器 

5、清理缓存 测试

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值