我正在使用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)上激活,并调用您选择的动作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top