JSF 2.0 和多次提交问题

Posted

技术标签:

【中文标题】JSF 2.0 和多次提交问题【英文标题】:JSF 2.0 and Multiple Submission problem 【发布时间】:2011-05-04 20:27:55 【问题描述】:

有人告诉我JSF 2.0 会自动处理多次提交问题。 是对的吗? 如果是,JSF 2.0 如何做到这一点? 如果不是,有哪些需要注意的地方,以免在处理这个问题时留下任何陷阱?

谢谢。

【问题讨论】:

【参考方案1】:

这是由JSF spec issue 559 请求和维护的。就目前而言,它还不存在,但它是针对即将到来的 JSF 2.2 的。

在此之前,Seam's <s:token> 是您最好的解决方案,它不仅可以防止 CSRF(根据JSF impl issue 812,自 JSF 2.1 以来,这不再是绝对必要的),而且还可以重复提交。

【讨论】:

我们没有使用 Seam。我们正在使用 JSF 2.0 和 Prime Faces。有什么想法或建议吗? 您要处理这个客户端还是服务器端?如果是客户端,请检查 this answer 中的 javascript setTimeout() 方法。如果是服务器端,我认为在视图范围 bean 的操作方法中检查和设置布尔属性是最简单的。对于更高级的解决方案,使用完全有价值的令牌,您可能会从 this article 中获得一些想法。【参考方案2】:

<h:commandButton onclick ="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);setTimeout('document.getElementById(\'' + this.id + '\').disabled=false;', 500);" />

考虑改进您的简单而优雅的解决方案。我认为我们应该在一段时间后启用提交按钮。我相信你会想到这一点,但这是给像我这样的其他新手读者的:-)

【讨论】:

以上是关于JSF 2.0 和多次提交问题的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.0 每页生成多个请求

@ViewScoped JSF bean 被多次初始化

在 JSF 2.0 中动态创建输入字段并将其链接到支持 bean

JSF 2.0 和 selectManyListbox 中的生命周期问题

jsf 1.2和jsf 2.0之间的区别

RichFaces 3.3.3 和 JSF 2.0 工作示例