reRendering richfaces / jsf组件时,如何维护由jQuery / javasscript操纵的DOM的状态?

我在jsf应用程序中渲染我的一些组件时遇到了问题。 问题是当我在我的页面上使用jQuery时,例如隐藏按钮。 当页面重新显示时,按钮将返回其原始forms,该forms应该被隐藏。

有人在这个问题上有专业知识可以帮助我找到合适的解决方案,或者这里有一些原则或者我盲目误解的技术?

谢谢。 🙂

问题是当我在我的页面上使用jQuery时,例如隐藏按钮。 当页面重新显示时,按钮将返回其原始forms,该forms应该被隐藏。

不要使用jQuery来操作DOM,而是使用JSF Ajax来操作DOM。

例如

         

也可以看看:

  • 当用户可以通过CSS,HTML,JavaScript,jQuery实现UI时,JSF的需求是什么?

我们在IceFaces 1.8.2下遇到了同样的问题。 问题是服务器端应用程序不知道您的客户端对DOM的更改。 我们通过将标记类应用于我们想要使用jQuery操作的元素来为我们解决它。 我们使用DOM-Updates的通用客户端回调(IceFaces 1.8.x下的onAsynchronousReceive )重新应用我们的脚本。

不幸的是RichFaces不具体:

  

在页面标记的某处(我们使用jQuery绑定到j而不是$):

  

但是 :小心将监听器应用于回调中的元素。 如果元素没有被替换,则为第二次,第三次,第四次分配相同的侦听器…

在JSF2下,AJAX成为规范的一部分。 您可以查看客户端方法addOnEvent ,它可能是Ice.onAsynchronousReceive的通用计数器部分。

但是,并非所有组件框架似乎都使用规范的客户端实现来执行其DOM更新(即PrimeFaces)。

但我猜这个原则很清楚。 更换DOM元素后需要重新运行脚本:)