Хорошо, я использую Spring Webflow, и в настоящее время у меня есть поток, который включает две страницы jsp (просмотры), вторая из которых отправляет форму в стороннюю систему (платежи).
В моем pay-flow.xml есть такие состояния:
<!-- Initial state, the jsp(view) gathers the number of items to purchase -->
<view-state id="buy" view="credit/buy" model="credit">
<transition on="submit" to="createTrans" />
</view-state>
<!-- State not tied to a jsp, saves the "credit" object to the database -->
<action-state id="createTrans">
<evaluate expression="creditAction.saveTrans(credit)"/>
<transition to="wpRedirect"/>
</action-state>
<!-- Gathers some more info & has a form that submits to the 3rd party system -->
<view-state id="wpRedirect" view="credit/redirect">
<transition on="accepted" to="showInvoice" history="invalidate">
<evaluate expression="creditAction.reloadTrans(credit)" result="credit" />
</transition>
</view-state>
Как видите, процесс в основном такой;
1) Показать 1-й JSP, пользователь вводит некоторые детали, отправляет форму
2) Сохранить объект модели в базе данных в фоновом режиме
3) Показать 2-й JSP, пользователь вводит более подробную информацию и отправляет форму
4) Форма отправляется на сторонний URL, пользователь взаимодействует со сторонней системой
5) В конце концов третья сторона перенаправляет обратно в поток
6) При «принятом» ответе перезагрузите ранее сохраненный объект модели
То, что я хочу сделать, - это объединить оба jsps в одно представление и в основном сжать эти три состояния в одно. У меня есть некоторые элементы управления JavaScript и формы, чтобы собрать всю информацию вместе.
Вопрос в том, как я могу отправить форму на сторонний URL-адрес, но перед тем, как сделать это, по-прежнему вызывать метод creditAction.saveTrans (credit) на стороне сервера? Очевидно, что это должно быть прозрачно для пользователя, они должны быть довольны тем, что страницы теперь объединены, но все равно нужно только нажать «Отправить» в конце и выполнить все сохранение и загрузку фона без их ведома.
Я думал, что могу нажать кнопку «Отправить» нажатием одной кнопки, просто сделав ее обычной кнопкой, а затем отправить форму из javascript, как показано ниже, но как я могу вызвать мой код на стороне сервера, чтобы сохранить модель по существу на строка перед .submit ()?
function submitform() {
<!-- call creditAction.saveTrans(credit) somehow??? -->
document.forms["myform"].submit();
}