0

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

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
}

不幸的是,这不会触发我的流程中请求的转换。页面没有变化。有谁知道如何处理这个?

谢谢, 亚历山大

4

6 回答 6

1

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

所以:

function myFormSubmit( eventId ) {
   var formAction = document.myForm.action;
   document.myForm.action = formAction + '&_eventId=' + eventId;
   document.myForm.submit();
   return true;
}
于 2008-12-19T16:26:47.817 回答
1

仔细观察,这段代码有很多问题。

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

document.getElementById('myFormId');

盲目地在表单操作 URL 后附加一个 & 符号假定已经有另一个 url 参数,因此 URL 后面已经有一个问号。如果不是这种情况,则以下换行:

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

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

于 2008-12-19T16:43:11.920 回答
1

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

可以在http://forum.springsource.org/showthread.php?p=219358#post219358看到 phaseListener 代码。

于 2009-01-05T17:08:15.590 回答
0

您是在 GET 参数还是 POST 参数中寻找此参数?它不会出现在 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 与 POST 参数就是问题所在。

* non-IE: trying to set the name or type in IE will FAIL, thus don't test there.
于 2008-12-19T16:22:31.383 回答
0

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

于 2008-12-19T18:00:15.553 回答
0

Is there any reason you can't use the Spring Faces components which come with SWF? There's an ajaxEvent tag you can use to wrap elements. It activates on given javascript events (onclick, onchange) and invokes an action of your choice.

于 2009-12-17T22:58:37.563 回答