activti入门系列文章5 - 监听器

开始结束元素事件监听器:

                ExecutionListener(event=start,end)

任务元素事件监听器:

              TaskListener(event=create,assignment,complete,all)

                ExecutionListener(event=start,end)

监听器类型:

create: 任务创建且所有任务属性设置完全之后触发。

assignment: 任务分配给某个班里人之后触发,并在create之后。

complete: 任务完成时触发,在运行时任务数据被删除之前触发(act_ru_task表数据清之前)。

<activiti:executionListener event="start" class="com.xx.xx"/>
<activiti:executionListener event="start" expression="${name}"/>
<userTask id="task1" name="用户任务">
    <extensionElements>
       <activiti:taskListener event="complete" class="com.task.listener.taskForUserTaskComplete"/>
    </extensionElements>
</userTask>
<activiti:taskListener event="create" expression="#{expression}"></activiti:taskListener>
<activiti:taskListener event="create" delegateExpression="${someJavaDelegateBean}"></activiti:taskListener>

在eclipse activiti插件中设置视图如下:

1、Class

TaskListener

public class MyTaskListener implements TaskListener{
   private static final long serialVersionUID = 1L;
   public void notify(DelegateTask delegateTask) {
      // TODOAuto-generated method stub
      delegateTask.setAssignee("赵六"); // 指定办理人
   }
}

ExecutionListener:

public class ExectuionListenerDemoimplements Serializable, ExecutionListener {
         privatestatic final long serialVersionUID = 8513750196548027535L;
         @Override
         publicvoid notify(DelegateExecution execution) throws Exception {
                 System.out.println("流程监听器");
         }
}

2、Expression

通过表达式来实现监听执行,可指定调用的方法。

<activiti:taskListener event="create" expression="#{myService.doSomething()}"></activiti:taskListener>

会调用myService的doSomething方法。

3、Delegate expression

引用一个JavaDelegate来调用java bean。

delegateExpression是引用一个JavaDelegate实现bean,具体的操作在这个bean中定义,默认一个execute方法。

比如

@Service("someJavaDelegateBean");
public class ToUppercase implements JavaDelegate {
  public void execute(DelegateExecution execution) throws Exception {
    String var = (String) execution.getVariable("input");
    var = var.toUpperCase();
    execution.setVariable("input", var);
  }
}
<activiti:taskListener event="create" delegateExpression="${someJavaDelegateBean}"></activiti:taskListener>

4.Alfresco execution script

外部定义的执行脚本

5.Alfresco  task script

外部定义的任务脚本

Fields: 值域

可以作为参数值传给上面指定的执行对象。

Field Name: 值域名称

String Value:值域值

Expression:值域表达式

<activiti:field name="text1">
        <activiti:expression>${genderBean.getGenderString(gender)}</activiti:expression>
</activiti:field>

持续更新。。。。

Activiti中国社区交流群:839915498

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中可以通过监听器(Listener)来监听 Map 数据的变化。具体实现步骤如下: 1. 定义一个 Map 监听器接口,并声明对 Map 数据变化的响应方法: ``` public interface MapListener<K, V> { void onPut(K key, V value); // 添加元素时触发 void onRemove(K key); // 删除元素时触发 void onClear(); // 清空 Map 时触发 } ``` 2. 实现 Map 监听器接口: ``` public class MyMapListener<K, V> implements MapListener<K, V> { @Override public void onPut(K key, V value) { // 处理添加元素事件 } @Override public void onRemove(K key) { // 处理删除元素事件 } @Override public void onClear() { // 处理清空 Map 事件 } } ``` 3. 在需要监听的 Map 中添加监听器: ``` Map<K, V> map = new HashMap<>(); MapListener<K, V> listener = new MyMapListener<>(); map.addMapListener(listener); ``` 在此基础上,我们还可以实现一个可观察的 Map 类,使其能够在数据发生变化时通知所有注册的监听器。具体实现可以参考下面的代码: ``` public class ObservableMap<K, V> extends HashMap<K, V> { private List<MapListener<K, V>> listeners = new ArrayList<>(); public void addMapListener(MapListener<K, V> listener) { listeners.add(listener); } public void removeMapListener(MapListener<K, V> listener) { listeners.remove(listener); } @Override public V put(K key, V value) { V oldValue = super.put(key, value); for (MapListener<K, V> listener : listeners) { listener.onPut(key, value); } return oldValue; } @Override public V remove(Object key) { V value = super.remove(key); for (MapListener<K, V> listener : listeners) { listener.onRemove((K) key); } return value; } @Override public void clear() { super.clear(); for (MapListener<K, V> listener : listeners) { listener.onClear(); } } } ``` 使用时,只需要创建一个 ObservableMap 对象,并添加监听器即可: ``` ObservableMap<K, V> map = new ObservableMap<>(); MapListener<K, V> listener = new MyMapListener<>(); map.addMapListener(listener); ``` 这样,当 Map 中的数据发生变化时,所有注册的监听器都会得到相应的通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值