Spring Statemachine:无法对选择状态转换执行操作?
Spring Statemachine: Action on choice state transition not possible?
添加到选择伪状态的动作似乎被默默地忽略了。这样做:
Builder builder = StateMachineBuilder.builder();
StateConfigurer states = builder.configureStates().withStates();
StateMachineTransitionConfigurer transitions = builder.configureTransitions();
StateConfigurer statesConfig = states.initial(INITIAL).states(EnumSet.allOf(StateType.class));
statesConfig.choice(StateType.CHOICE_STATE);
transitions.withChoice().source(StateType.CHOICE_STATE). //
first(StateType.S1, someGuard). //
last(StateType.S2);
states.state(StateType.CHOICE_STATE, someAction, null);
导致在输入 CHOICE_STATE 时永远不会执行 someAction。
框架不允许向 CHOICE_STATE 之外的转换添加操作(例如,到上面的 S1 或 S2)。
为了解决这个问题,我们在 CHOICE_STATE 之前实现了一个状态。然后我们可以像往常一样自由地向这个状态添加动作。我只是想知道这种限制的原因是什么,或者是否有某种方法可以将操作置于我可能错过的伪状态。
那是因为选择是一个 pseudostate
,它应该是暂时的,所以在该状态本身不应该有行为改变。
您是否尝试过使用 Transition
来定义 Action
,这会让您进入选择状态?
@Override
public void configure(StateMachineTransitionConfigurer<TestStates, TestEvents> transitions) throws Exception {
transitions
.withExternal()
.source(TestStates.S1)
.target(TestStates.S2)
.event(TestEvents.E2)
.action(externalTestAction());
}
@Bean
public Action<TestStates, TestEvents> externalTestAction() {
return new TestAction();
}
前置状态是一个很好的解决方法,尤其是伴随着无触发转换的状态
我可以尝试看看在 Spring Statemachine 中我们是否可以将功能添加到转换(选择转换的配置器)本身。我为此 https://github.com/spring-projects/spring-statemachine/issues/108.
创建了一张票
虽然我们主要尝试遵循 UML
模型,但规范的大部分内容都非常模糊,并且将许多实现细节留给实现本身。
添加到选择伪状态的动作似乎被默默地忽略了。这样做:
Builder builder = StateMachineBuilder.builder();
StateConfigurer states = builder.configureStates().withStates();
StateMachineTransitionConfigurer transitions = builder.configureTransitions();
StateConfigurer statesConfig = states.initial(INITIAL).states(EnumSet.allOf(StateType.class));
statesConfig.choice(StateType.CHOICE_STATE);
transitions.withChoice().source(StateType.CHOICE_STATE). //
first(StateType.S1, someGuard). //
last(StateType.S2);
states.state(StateType.CHOICE_STATE, someAction, null);
导致在输入 CHOICE_STATE 时永远不会执行 someAction。
框架不允许向 CHOICE_STATE 之外的转换添加操作(例如,到上面的 S1 或 S2)。
为了解决这个问题,我们在 CHOICE_STATE 之前实现了一个状态。然后我们可以像往常一样自由地向这个状态添加动作。我只是想知道这种限制的原因是什么,或者是否有某种方法可以将操作置于我可能错过的伪状态。
那是因为选择是一个 pseudostate
,它应该是暂时的,所以在该状态本身不应该有行为改变。
您是否尝试过使用 Transition
来定义 Action
,这会让您进入选择状态?
@Override
public void configure(StateMachineTransitionConfigurer<TestStates, TestEvents> transitions) throws Exception {
transitions
.withExternal()
.source(TestStates.S1)
.target(TestStates.S2)
.event(TestEvents.E2)
.action(externalTestAction());
}
@Bean
public Action<TestStates, TestEvents> externalTestAction() {
return new TestAction();
}
前置状态是一个很好的解决方法,尤其是伴随着无触发转换的状态
我可以尝试看看在 Spring Statemachine 中我们是否可以将功能添加到转换(选择转换的配置器)本身。我为此 https://github.com/spring-projects/spring-statemachine/issues/108.
创建了一张票虽然我们主要尝试遵循 UML
模型,但规范的大部分内容都非常模糊,并且将许多实现细节留给实现本身。