通过JSF集成激活SpringWebFlow转换的Javascript表单提交

通过JSF集成激活SpringWebFlow转换的Javascript表单提交,javascript,jsf,facelets,spring-webflow,Javascript,Jsf,Facelets,Spring Webflow,我正在使用SpringWebflow2、Facelets和JSF开发一个应用程序。我的一个流确实有一个页面,在某些事件中必须触发表单提交。对于每个不同的动作,必须呈现不同的视图。因此,我尝试激活以下javascript代码来执行提交: function myFormSubmit( eventId ) { var formAction = document.myForm.action; document.myForm.action = formAction + '&_event

我正在使用SpringWebflow2、Facelets和JSF开发一个应用程序。我的一个流确实有一个页面,在某些事件中必须触发表单提交。对于每个不同的动作,必须呈现不同的视图。因此,我尝试激活以下javascript代码来执行提交:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
}
不幸的是,这不会触发流中请求的转换。页面不会改变。有人知道怎么处理吗

谢谢,
Alexandre

您是在GET参数还是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.

您是在GET参数还是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.

我对SringFaceletsSF一无所知,但我认为事件处理程序应该返回
true
。否则,您的浏览器将不会提交表单

因此:


我对SringFaceletsSF一无所知,但我认为事件处理程序应该返回
true
。否则,您的浏览器将不会提交表单

因此:


仔细检查,这段代码有很多问题

document.myForm.action是获取元素的非标准方式。更好的跨浏览器方式是:

document.getElementById('myFormId');
盲目地在表单操作URL中添加一个符号,会假定已经存在另一个URL参数,因此URL后面已经有一个问号。如果不是这种情况,则以下换行符:

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

最后,如果您将此函数作为onsubmit处理程序调用,我认为您应该只返回true,而不是调用
myForm.submit()
方法,仔细检查,此代码有很多问题

document.myForm.action是获取元素的非标准方式。更好的跨浏览器方式是:

document.getElementById('myFormId');
盲目地在表单操作URL中添加一个符号,会假定已经存在另一个URL参数,因此URL后面已经有一个问号。如果不是这种情况,则以下换行符:

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

最后,如果您将此函数作为onsubmit处理程序调用,我认为您应该返回true,而不是调用
myForm.submit()
方法

修改form.action是向表单提交添加信息的一种非常糟糕的方法。我建议在表单中添加一个隐藏的输入,您可以使用eventID填充它。

修改form.action是向表单提交添加信息的一种非常糟糕的方式。我建议在表单中添加一个隐藏的输入,您可以使用eventID进行填充。

我在SpringWebFlow论坛中找到了解决方案。Jeremy Grelle认为,在将Spring WebFlow集成到JSF时,提交“_eventId”参数不会触发转换。他给出的解决方案是创建一个JSF PhaseListener,在发送“_eventId”参数时创建一个JSF动作


phaseListener代码可以在上看到。

我在SpringWebFlow论坛上找到了解决方案。Jeremy Grelle认为,在将Spring WebFlow集成到JSF时,提交“_eventId”参数不会触发转换。他给出的解决方案是创建一个JSF PhaseListener,在发送“_eventId”参数时创建一个JSF动作


phaseListener代码见。

有什么原因不能使用SWF附带的弹簧面组件吗?有一个ajaxEvent标记可用于包装元素。它在给定的javascript事件(onclick、onchange)上激活,并调用您选择的操作。

您有什么理由不能使用SWF附带的Spring Faces组件吗?有一个ajaxEvent标记可用于包装元素。它在给定的javascript事件(onclick、onchange)上激活,并调用您选择的操作。

此事件是如何附加到表单的?是什么激活了它?常规表单元素事件?一次改变,一次舔,等等!请提供您试图提交的表单的HTML,这样可以更容易地回答您的问题。此事件是如何附加到您的表单的?是什么激活了它?常规表单元素事件?一次改变,一次舔,等等!请提供您试图提交的表单的HTML,这使回答您的问题更加容易。我不确定我是否理解您的问题,但我想做的是在我的POST请求中添加参数“\u eventId”。使用firebug调试请求时,它确实添加了参数,但是服务器没有像我所想的那样处理它。我不确定我是否理解你的问题,但我想做的是将参数“\u eventId”添加到我的POST请求中。使用firebug调试请求时,它确实添加了参数,但是它没有像我所想的那样被处理。使用firebug调试服务器时,我可以看到提交已经完成。无论如何,正如你所说,我已经添加了“return true”,结果是与firebug相同的bug,我可以看到提交已经完成。总之,正如你所说,我已经添加了“return true”,结果是tips三联画的sameThanks。我知道你指出的问题。现在,我只是想让它在Firefox中工作。这就是这么糟糕的代码的借口。确实还有另一个url参数,所以生成的操作url是可以的。谢谢三联图的提示。我知道你指出的问题。现在,我只是想让它在Firefox中工作。这就是这么糟糕的代码的借口。确实还有另一个url参数,因此生成的操作url是OK的。