Отправление формы JavaScript для активации переходов Spring Web Flow с интеграцией JSF

StackOverflow https://stackoverflow.com/questions/381434

Вопрос

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

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

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

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

Это было полезно?

Решение 3

У меня есть решение на форуме Spring Webflow. Согласно Джереми Грелле, представление параметра «_eventid» не запускает переходы при интеграции Spring Webflow в JSF. Решение, которое он дал, заключалось в создании Phaselistener JSF, который создает действие JSF, когда отправляется параметр «_EVENTID».

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

Другие советы

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

так:

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

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

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

document.getElementById('myFormId');

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

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

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

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

Вы ищете этот параметр в своих параметрах Get или Post Params? Это не появится в посте.

Обновлять:

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

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

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();
}

Проверьте в любом браузере (не (не)* и посмотрите, работает ли он. Если это так, то Post Param - это проблема.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top