当前位置: 首页 > 知识库问答 >
问题:

无法从操作触发事件

笪成周
2023-03-14
transitions.withExternal()
    .source("INITIAL")
    .target("SECOND")
    .event("FIRST_EVENT")
    .action(new Action<String, String>() {
        @Override
        public void execute(StateContext<String, String> context) {
            System.out.println("FIRST_ACTION_EXECUTED");
            context.getStateMachine().sendEvent("SECOND_EVENT");
        }
    })
    .and()
    .withExternal()
    .source("SECOND")
    .target("THIRD")
    .event("SECOND_EVENT")
    .action(new Action<String, String>() {
        @Override
        public void execute(StateContext<String, String> context) {
            System.out.println("TEST SUCCESS");
        }
    });

在这里,我得到了一个notaccepted异常,我知道原因是stateMachine.getState()是INITIAL,它不能直接将状态从INITIAL更改为THIRD。

所以我的问题是,我是否可以配置我的statemachine在第一个事件完成时自动触发第二个事件

共有1个答案

单于季
2023-03-14

这是因为你使用的动作类型。Spring SM中有两种主要类型的动作--转换动作和状态动作--它们在不同的时间解决。您可以在这里看到这些操作的一系列解析

为了激发事件以转到下一个状态,您应该使用状态操作。

您可以配置状态操作,如下所示:

   builder.configureStates()
            .withStates()
            .initial(SI)
            .state(F1, context -> context.getStateMachine().sendEvent(E2))
            .state(F2, context -> context.getStateMachine().sendEvent(E3))
            .end(SF);

    builder.configureTransitions()
            .withExternal().source(SI).target(F1).event(E1)
            .and()
            .withExternal().source(F1).target(F2).event(E2)
            .and()
            .withExternal().source(F2).target(SF).event(E3)
                .action(context -> System.out.println("Completing SM!"));
STATE ENTERED: SI
STAGE TRANSITIONS From: null To: SI
STATE EXITED: SI
STATE ENTERED: F1
STAGE TRANSITIONS From: SI To: F1
21:45:39.153 [pool-2-thread-1] DEBUG org.springframework.statemachine.support.AbstractStateMachine - Queue event GenericMessage [payload=E2, headers={id=393a5636-a760-57d6-a98b-d31eb75f048e, timestamp=1560969939152}] SF F2 F1 SI  / F1 / uuid=4e8773c1-e755-40de-b431-e53a4b0ca64d / id=null
STATE EXITED: F1
STATE ENTERED: F2
STAGE TRANSITIONS From: F1 To: F2
21:45:39.161 [pool-2-thread-1] DEBUG org.springframework.statemachine.support.AbstractStateMachine - Queue event GenericMessage [payload=E3, headers={id=f5899e8b-e4a5-e079-3a30-66114a7accac, timestamp=1560969939161}] SF F2 F1 SI  / F2 / uuid=4e8773c1-e755-40de-b431-e53a4b0ca64d / id=null
Completing SM!
STATE EXITED: F2
STATE ENTERED: SF
STAGE TRANSITIONS From: F2 To: SF
 类似资料:
  • 我试图在用户每次进入该页面时更改JavaFX软件GUI标签的文本。为此,我必须能够更改该标签的值,例如将其解析为变量并执行这些操作。 问题是,由于标签都是用FXML编写的,我不知道如何在Java上正确使用它。我尝试了: @FXML公共标签WordID; 为了使标签(其ID为“WordID”)成为一个对象,我失败了。当我这样做的时候,程序就不会再进入那个框架了。我该怎么办? 代码: FXML: 屏幕

  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var

  • 我有一个Primeface应用程序,其中我启动了一个包含表单的对话框。对话框有一个保存/取消按钮对。在这个对话框中,我无法调用on完成、onstart等方法。我在其他回复中看到原因是没有执行AJAX。但是,我不知道这种情况下的原因,因为命令按钮的类型是提交,并且应该有ajax="true"(默认情况下)。有人能在里面放一点光吗? 我的xhtml: 这是我的后盾: 谢谢!

  • 概览 触发器配置卡片 此面板配置一些触发器的基本信息,或者进行查阅触发器触发日志等操作。 触发类型目前有两种: 数据表 微信支付回调 条件卡片 对应上面的触发类型,设置不同触发类型的参数。 动作卡片 当触发器的条件被满足,将会执行触发器中的动作。 目前有四种动作类型可选,分别如下: 邮件 微信模板消息 webhook 数据表操作 不同的触发类型对应可选的动作类型不同,每个动作类型又有可选模板变量的

  • 问题内容: 我正在构建一个React应用,并正在调用一个自定义处理程序库来调用我们的REST API。 在这些(非响应)函数中,我想触发Redux操作以使用端点响应来更新商店,但是如果没有通常的’mapDispatchToProps’/ connect()方法,就无法弄清楚如何触发Redux操作。 这可能吗? 谢谢 问题答案: 为了从您的范围之外进行调度和采取行动,您需要获取商店实例并像这样调用它