web-dev-qa-db-ja.com

SpringWebflow-意思決定状態とアクション状態

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

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

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

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

16
Johnathan Smith

通常、_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>
_

私はそれが物事をクリアすることを願っています。

31
Ian Bishop

1。紛らわしいケース

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

<action-state id = "moreAnswersNeeded">
<evaluate expression = "interview.moreAnswersNeeded()" />
<transition on = "yes" to = "answerQuestions" />
<transition on = "no" to = "finish" />
</ action-state>

そして:

<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>を使用すると、より複雑なロジックを処理できます。例外を処理したり、条件付きにすることなく式を実行したり、前者よりも多くのケースを処理したりできます。

お役に立てれば。

3
Witold Kaczurba

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

HTH

1
stephen.hanson

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

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

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

状態を覚えている

1
Jhon Castro