Отправка формы Javascript для активации переходов Spring Web Flow с интеграцией JSF - PullRequest
0 голосов
/ 19 декабря 2008

Я занимаюсь разработкой приложения с использованием Spring WebFlow 2, Facelets и JSF. У одного из моих потоков есть страница, которая должна инициировать отправку формы при определенных событиях. Для каждого отдельного действия должен быть представлен другой взгляд. Итак, я пытаюсь активировать следующий код JavaScript для выполнения отправки:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
}

К сожалению, это не вызывает запрошенный переход в моем потоке. Страница не меняется. Кто-нибудь знает, как с этим бороться?

Спасибо, Александр

Ответы [ 6 ]

1 голос
/ 05 января 2009

У меня есть решение на форуме Spring WebFlow. Согласно Джереми Грелле, передача параметра "_eventId" не вызывает переходы при интеграции Spring WebFlow в JSF. Решение, которое он дал, состояло в том, чтобы создать JSF PhaseListener, который создает действие JSF при отправке параметра "_eventId".

Код phaseListener можно увидеть на http://forum.springsource.org/showthread.php?p=219358#post219358.

1 голос
/ 19 декабря 2008

При ближайшем рассмотрении, есть куча проблем с этим кодом.

document.myForm.action - это нестандартный способ получения элементов. Лучший кросс-браузерный способ:

document.getElementById('myFormId');

Слепое добавление амперсанда к URL-адресу действия формы предполагает, что уже есть другой параметр url, и поэтому после URL-адреса уже есть вопросительный знак. Если это не так, следующие разрывы строк:

document.myForm.action = formAction + '&_eventId=' + eventId;

Наконец, если вы вызываете эту функцию как обработчик отправки, я считаю, что вы должны просто вернуть true, а не вызывать метод myForm.submit()

1 голос
/ 19 декабря 2008

Не знаю ничего о SringFaceletsSF, но я думаю, что обработчик событий, вероятно, должен вернуть true. В противном случае ваш браузер не отправит форму.

так:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
   return true;
}
0 голосов
/ 18 декабря 2009

Есть ли причина, по которой вы не можете использовать компоненты Spring Faces, поставляемые с SWF? Есть тег ajaxEvent, который вы можете использовать для переноса элементов. Он активируется при заданных событиях JavaScript (onclick, onchange) и вызывает действие по вашему выбору.

0 голосов
/ 19 декабря 2008

Изменение form.action - очень плохой способ добавления информации к отправке формы. Я предлагаю поместить в форму скрытый ввод, который вы можете заполнить с помощью идентификатора события.

0 голосов
/ 19 декабря 2008

Вы ищете этот параметр в параметрах GET или POST? Не отображается в POST.

Обновление:

Хорошо, чтобы проиллюстрировать, попробуйте это ...

измените свою функцию, чтобы сделать это:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   //document.myForm.action = formAction + '&_eventId=' + eventId;
     var myAction = document.createElement('input');
     myAction.setAttribute('name', '_eventId');
     myAction.setAttribute('type', 'hidden');
     myAction.setAttribute('value', eventId);
     document.myForm.appendChild(myAction);
   document.myForm.submit();
}

Проверьте в любом (не IE) * браузере и посмотрите, работает ли он. Если так, то параметр GET vs. POST является проблемой.

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.
...