需求:在业务上 有些代码的校验 需要在按钮事件执行前 或者是按钮正常执行后 去执行
这个时候 就需要添加拦截器(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、清理缓存 测试