通过JSF集成激活SpringWebFlow转换的Javascript表单提交
我正在使用SpringWebflow2、Facelets和JSF开发一个应用程序。我的一个流确实有一个页面,在某些事件中必须触发表单提交。对于每个不同的动作,必须呈现不同的视图。因此,我尝试激活以下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
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的。