Использовать объект результата первого вызова concordion как arg в вызове secound concordion
Я хочу использовать переменную person.id для того, чтобы сделать другой вызов. Но кажется, что Concordion не поддерживает это ("Неверное выражение"). Обязан ли я использовать бин с человеком и работой и делать вызовы типа getLoginAndJob?
<span c:execute="#person = login(#login,#password)"></span>
<span c:execute="#job = getJob(#person.id)"></span>
2 ответа
Чтобы сохранить спецификации простыми и понятными, Concordion намеренно ограничивает формат выражений, который допускается при настройке технических характеристик.
В этом случае я бы предложил изменить метод getJob() в классе фикстур, чтобы взять объект person.
Однако, если вы хотите снять ограничение, вы можете применить аннотацию @FullOGNL к своему классу приборов, и Concordion примет все выражения, которые допускает библиотека OGNL, включая это.
Поскольку этот вопрос возникает довольно часто, я добавил его в FAQ по Concordion.
Другой подход заключается в назначении нужного значения в переменную. Таким образом, ваш код станет:
<span c:execute="#person = login(#login,#password)"></span>
<span c:set="#personId = getId(#person)"></span>
<span c:execute="#job = getJob(#personId)"></span>
Если у вашего класса Person еще нет метода-получателя для его поля id, вам придется добавить его.