Доступ к нескольким параметрам запроса в потоке - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть состояние действия в Spring Web Flow, которое принимает параметры из отправленной формы:

<action-state id="newToken">
    <set name="requestScope.timestamp" value="requestParameters.timestamp" type="java.lang.String"/>
    <set name="requestScope.origin" value="requestParameters.origin" type="java.lang.String"/>
    <set name="requestScope.tokenHmacToValidate" value="requestParameters.tokenHmacToValidate" type="java.lang.String"/>
    <transition to="validateToken"/>
</action-state>

Однако устанавливается только первое значение requestParameters (т. Е. Если timestamp первое , тогда только это установлено. Если origin сначала, то только это установлено). Когда я получаю доступ ко второму и третьему значениям, они имеют значение null вместо значения, которое передается в него. Вот пример данных формы, которые передаются при отправке формы:

_eventId=tokenValidationEvent
origin=https%3A%2F%2Flocalhost%3A8443
timestamp=20200218171041
tokenHmacToValidate=**REDACTED**

Вся информация передается при отправке формы, но только первый тег <set> фактически устанавливает данные. Я неправильно получаю запрос? Есть ли что-то, что мне нужно зарегистрировать где-то, что я не делаю

1 Ответ

1 голос
/ 18 февраля 2020

Так работает <action-state>. Оценивается только первое выражение.

Если вы хотите, чтобы все три были оценены, вы можете использовать <on-entry> для оценки другого 2:

    <action-state id="newToken">
        <on-entry>
            <set name="requestScope.timestamp" value="requestParameters.timestamp" type="java.lang.String"/>
            <set name="requestScope.origin" value="requestParameters.origin" type="java.lang.String"/>
        </on-entry>
        <set name="requestScope.tokenHmacToValidate" value="requestParameters.tokenHmacToValidate" type="java.lang.String"/>
        <transition to="validateToken"/>
    </action-state>

С https://docs.spring.io/spring-webflow/docs/current/reference/html/actions.html#action -state

После выполнения каждого действия состояние действия проверяет результат, чтобы определить, соответствует ли объявленный переход в другое состояние. Это означает, что если сконфигурировано более одного действия, они выполняются в упорядоченной цепочке, пока одно из них не вернет результирующее событие, которое соответствует переходу состояния из состояния действия, в то время как остальные игнорируются. Это форма шаблона цепочки ответственности (CoR).

Результатом выполнения действия обычно является критерий перехода из этого состояния. Дополнительная информация в текущем RequestContext также может быть протестирована как часть пользовательских критериев перехода, допускающих сложные выражения перехода, основанные на контекстном состоянии.

Обратите также внимание, что состояние действия, как и любое другое состояние, может иметь еще одно состояние -вступительные действия, которые выполняются в виде списка от начала до конца.

...