JavaScript表单提交以激活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论坛中有解决方案。根据杰里米·格雷尔(Jeremy Grelle)的说法,在将Spring WebFlow集成到JSF时,“ _Eventid”参数的提交不会触发过渡。他给出的解决方案是创建一个JSF phaselistener,该词素在发送“ _EventID”参数时会创建JSF操作。
可以在 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的and and和,假设已经存在另一个URL参数,因此在URL之后已经有一个问号。如果不是这种情况,则以下几行断裂:
document.myForm.action = formAction + '&_eventId=' + eventId;
最后, 如果 您将此功能称为Onsubmit处理程序,我相信您应该返回真实,而不是致电 myForm.submit()
方法
修改表单。操作是将信息添加到表单提交中的一种非常糟糕的方式。我建议将隐藏的输入放入您的表格中,您可以通过EventID填充。
您是在get参数或帖子参数中寻找此参数吗? 它不会出现在帖子中。
更新:
好的,为了说明,请尝试一下...
更改您的功能以执行此操作:
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();
}
在任何(non-ie)*浏览器中进行测试,看看它是否有效。如果是这样,则get vs. post参数是问题。
* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.
有什么原因您不能使用SWF随附的春季面部分子吗?您可以使用一个Ajaxevent标签来包装元素。它在给定的JavaScript事件(OnClick,Onchange)上激活,并调用您选择的动作。