17

Spring WebFlow 2 を使用していますが、決定状態とアクション状態の違いを知りたいです。

私は読んでいて、意思決定状態と行動状態の違いを理解していません。ビューステートが入力用の JSP を表示することは理解していますが、意思決定状態とアクション状態の違いは何ですか?

アクション状態よりも意思決定状態を使用する必要があるのはなぜですか? 決定状態よりもアクション状態を使用する必要があるのはなぜですか?

誰かがこれに光を当てることができますか

4

4 に答える 4

32

通常、decision-stateブール条件のみに使用されます。何が起こるかについては、より明確で簡潔です。

例えば、

<decision-state id="myDecisionState">
    <if test="myBooleanFunction()" then="resultIsTrueState" else="resultIsFalseState" />
</decision-state>

action-stateこれは、次のようなものを使用して複製できます。

<action-state id="myActionState">
    <evaluate expression="myBooleanFunction()" />
    <transition on="yes" to="resultIsTrueState" />
    <transition on="no" to="resultIsFalseState" />
</action-state>

ただし、違いは、action-stateはブール値で動作するだけでなくString (string value)Boolean (yes/no)でトランジションをトリガーできることです。Enum (enum name)他の結果は と見なされsuccessます。

decision-stateしたがって、実際に何かを決定する必要がある とは対照的に、action-stateは単純にコードを実行するために使用できます。

<action-state id="myActionState">
    <evaluate expression="myFunction()" />
    <transition on="success" to="myNextState" />
</action-state>

これで問題が解決することを願っています。

于 2012-08-16T20:43:13.177 に答える
3

1. 紛らわしいケース

Webflow では、<decision-state>を<action-state>と同様の方法で使用できる場合があります。ドキュメントは、以下の2 つの式が交換可能であることを示しています。

<action-state id="moreAnswersNeeded">
  <evaluate expression="interview.moreAnswersNeeded()" />
  <transition on="yes" to="answerQuestions" />
  <transition on="no" to="finish" / >
</アクション状態>

と:

<decision-state id="moreAnswersNeeded">
  <if test="interview.moreAnswersNeeded()" then="answerQuestions" else="finish" />
</decision-state>

2. いつ何を使う?

<decision-state>が処理できるのは<action-state>が処理するもののサブセットのみであることを考えると、2 つの候補を検討するときは前者から始める必要があります。

  1. <decision-state>は、<action-state> の代替として、if-else ルーティングに使用することを意図しています。丸めのバイナリ決定として機能します。適用できる場合は、使用する必要があります。
  2. < action-state>を使用すると、より複雑なロジックを処理できます。例外を処理でき、式を条件なしで実行でき、前者よりも多くのケースを処理できます。

お役に立てれば。

于 2017-01-05T14:47:05.917 に答える
1

それらは非常に似ています。任意の決定状態をアクション状態として記述できます。if決定状態は、(要素を使用して)条件付き遷移のための便利で簡潔な構文を提供するだけです。結果に応じて1つの式と遷移のみを評価する必要がある場合は、決定状態を使用します。それ以外の場合(たとえば、評価する式が複数ある場合)、アクション状態を使用します。

HTH

于 2012-08-16T22:11:35.293 に答える
1

ラムダ条件を使用できます

例: x = y ? 「真の結果」:「偽の結果」

	<view-state id="viewname">
		<on-entry>
			<evaluate expression="flowScope.varx == x ? Bean.somethingX : Bean.somethingY " result="flowScope.varResult" />
		</on-entry>
	</view-state>

状態を覚えている

于 2016-03-04T16:34:31.067 に答える