Spring Webflow - состояние решения vs action-state
Я использую Spring WebFlow 2, и я хочу знать разницу между состоянием решения и действительным состоянием.
Я читаю и не понимаю разницу между состоянием решения и действительным состоянием. Я понимаю, что в представлении состояния будет отображаться jsp для ввода, но что такое разность состояний принятия решения и состояние действия?
Почему я должен использовать состояние принятия решения над состоянием действия?
почему я должен использовать состояние действия над состоянием решения?
Может кто-то выстрелил в этот свет?
Ответы
Ответ 1
Как правило, 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)
с любым другим результатом, рассмотренным a success
.
Итак, в отличие от decision-state
, который фактически должен что-то решить, action-state
можно просто использовать для выполнения некоторого кода.
<action-state id="myActionState">
<evaluate expression="myFunction()" />
<transition on="success" to="myNextState" />
</action-state>
Я надеюсь, что это очистит.
Ответ 2
Они очень похожи. Вы можете написать любое состояние принятия решения как состояние действия. Состояние принятия просто обеспечивает удобный, сжатый синтаксис для условных переходов (с использованием элемента if
). Если мне нужно только оценить одно выражение и переход в зависимости от результата, я использую состояние принятия решения. В противном случае (например, если у меня есть несколько выражений для оценки), я использую состояние действия.
НТН
Ответ 3
вы можете использовать условие лямбда
Пример : x = y? "true result": "false result"
<view-state id="viewname">
<on-entry>
<evaluate expression="flowScope.varx == x ? Bean.somethingX : Bean.somethingY " result="flowScope.varResult" />
</on-entry>
</view-state>
Ответ 4
1. Неверный случай
В Webflow существуют случаи, когда < solution-state > может использоваться аналогично < action-state > . Документация показывает, что нижеприведенные два выражения взаимозаменяемы.
< действие-состояние id = "moreAnswersNeeded" >
< оценить выражение =" interview.moreAnswersNeeded() "/ >
< переход on = "yes" to = "answerQuestions "/ >
< переход on = "no "to =" finish "/ >
</действие состояния >
и
< решение-состояние id = "moreAnswersNeeded" >
< if test =" interview.moreAnswersNeeded()" then = "answerQuestions" else = "finish "/ >
</принятия состояния >
2. Когда использовать что?
Учитывая, что < solution-state > может обрабатывать только подмножество того, что обрабатывается < действие-состояние > , мы должны начинать с первого при рассмотрении двух кандидатов.
- < solution-state > предполагается использовать для маршрутизации if-else в качестве альтернативы < action-state > . Он работает как двоичное решение о роутинге. Если он может быть применен - его следует использовать.
- < действие-состояние > позволяет работать с более сложной логикой. Вы можете иметь дело с Exceptions, вы можете выполнять выражение, не делая его условным, и вы можете обрабатывать больше случаев, чем с предыдущим.
Надеюсь, что это поможет.