Глобальные переходы Spring webflow, динамическое определение атрибута проверки

У меня объявлен глобальный переход, и я хотел бы, чтобы значение атрибута "validate" было обусловлено или установлено в состоянии действия. Вот как я хотел бы это сделать:

<decision-state id="decision_view">
    <if test="condition == true" then="actionState1" />
</decision-state>

<action-state id="actionState1">
    <evaluate result="flowScope.validateGT1" expression="true"/>
</action-state>

<global-transitions>
    <transition on="gtransition1" to="gtransition1" 
    validate="flowScope.validateGT1" /> // Does not work, syntax error
</global-transitions>

Этот синтаксис вообще не работает. Есть ли способ определить валидацию логического значения динамически? В проекте, над которым я работаю, используется версия Spring webflow версии 2.3.1.

Спасибо.


person maxsoulard    schedule 15.07.2014    source источник
comment
Вы пробовали validate="${flowScope.validateGT1}"   -  person Nikhil Talreja    schedule 15.07.2014
comment
Моя IDE показывает следующую ошибку: Неверное значение атрибута.   -  person maxsoulard    schedule 15.07.2014
comment
И при выполнении: «$ {flowScope.validateGT1}» не имеет значения для «логического значения». (=› не является допустимым логическим значением).   -  person maxsoulard    schedule 15.07.2014


Ответы (2)


Я думаю, что вы не можете использовать выражение для логического значения, поскольку оно ожидает только литералы true или false: http://www.w3.org/TR/xmlschema-2/#boolean

Проверьте тип атрибута на «validate» в spring webflow xsd:

    xsd:attribute name="validate" type="xsd:boolean"

Вместо этого вы можете получить логическое значение в самом валидаторе и решить, следует ли выполнять проверку или нет, как:

    public class YourValidator {
        public void validateStateId(YourModel model, ValidationContext context) {
            RequestContext requestContext = RequestContextHolder.getRequestContext();
            boolean shouldValidate = (Boolean)requestContext.getFlowScope.get("validateGT1");
            if(shouldValidate){
                MessageContext messages = context.getMessageContext();
                ...
            }
        }
    }
person Prasad    schedule 15.07.2014

Попробуйте использовать оценить

<evaluate expression="flowScope.validateGT1" result="flag" />

<global-transitions>
    <transition on="gtransition1" to="gtransition1" 
    validate="flag" />
</global-transitions>
person Nikhil Talreja    schedule 15.07.2014
comment
Я не уверен, что понял ваш ответ, я думал, что тег ‹evaluate› не может быть объявлен вне состояния. - person maxsoulard; 15.07.2014