Отправление формы JavaScript для активации переходов Spring Web Flow с интеграцией JSF
-
23-08-2019 - |
Вопрос
Я разрабатываю приложение с использованием 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) и вызывает действие по вашему выбору.