ICEfaces 2真的有效吗?

| 根据文档,它应该是世界上最容易使用的产品:   只需将icefaces.jar添加到应用程序中,我们就将Direct-to-Dom(D2D)渲染应用于页面。 但是,即使是他们最基本的教程《 ICEfaces 2入门》也似乎不起作用。我在页面底部下载了代码,将其内置到WAR中,并将其部署到Tomcat 6.0.32和Tomcat 7.0.14中。我注意到的第一件事是由于某种原因复合组件无法正常工作:   /job-applicant.xhtml @ 39,78以下属性是必需的,但没有提供任何值:id。 但这感觉上更像是一个JSF问题(JSF 2 Composite组件的required属性抛出异常),因此我通过删除ID属性上的required来解决了这一问题(尽管对于不符合条件的值仍然存在required =“ true”似乎有问题)。无论如何,现在该应用程序已部署。如前所述,当您单击“清除”按钮时,它将使用AJAX调用,最终会在响应XML中获得表单的完整DOM。下一步是添加icefaces.jar,并且应该添加Direct-to-DOM功能,以确保仅在响应中发送差异:   ICEfaces 2将组件标记呈现到反映当前客户端视图的服务器端DOM(文档对象模型)。每次JSF生命周期运行时,都会进行DOM比较,并且,如果有任何更改,则会将简洁的页面更新集发送回客户端以应用于页面。我们将此称为Direct-to-DOM或D2D渲染。 但是,我得到了完整的表格作为回应,加上一些其他的ICEfaces内容,例如:
<input name=\"ice.window\" type=\"hidden\" value=\"epgo74zmvc\" />
<input name=\"ice.view\" type=\"hidden\" value=\"vs4ik661\" />
很明显,ICEfaces正在做某事,但没有履行承诺。它实际上比普通的AJAX响应更长。因此,忽略了实际上是更大的响应这一事实,我继续进行下一个承诺:   使用Direct-to-DOM渲染,我们不再需要嵌套在“清除”按钮中的f:ajax标签 听起来很直接吧?在页面上的示例中,他们只是将侦听器的EL表达式从f:ajax标记移至h:commandButton标记。那里的问题是方法签名是不同的。这本应该是入门教程,但实际上并不指导您完成所有步骤。无论如何,我可以通过修改后备bean中的clearForm方法的方法签名使其现在的参数为ActionEvent而不是AjaxBehaviorEvent来解决此问题。这样做,ICEfaces实际上确实用AJAX动作代替了整页动作,这是令人难以置信的,但是我的口中仍然有酸味。有谁知道为什么D2D似乎不起作用?难道我做错了什么?我是否仍应尝试使用ICEfaces?     
已邀请:
        您为什么认为这无法正常工作? 发生的事情是您获得了整个表单作为响应,以便可以在JSF生命周期中刷新服务器侧视图和控件状态。当您使用ajax标记调用表单的部分更新时,真正发生的是它只会将DOM更新呈现给指定的组件。 AJAX确实在这里发挥作用,但是它需要发送整个DOM,否则服务器端的逻辑可能正在查看过时的数据。 这不只是ICEFaces,这是JSF。实际上,这与ASP.NET的工作原理也基本相似。请参阅此链接以了解JSF生命周期。 http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html 如果这不是您期望的技术,我感到抱歉。     
        ICEfaces完成DOM比较后,需要发送更新。为了告诉桥的客户端部分将更新后的内容放在何处,ICEfaces需要指定一个祖先DOM节点的已知ID。服务器端渲染器仅知道JSF组件的ID,包括自动生成的ID和手动指定的ID。它无法处理原始HTML标记。因此,对于您对胖更新的观察,我最好的猜测是您正在使用许多HTML标记。 关于D2D和ICEfaces桥的另一件事是,它无法添加或删除子元素。它只能完全替换ID可寻址标签。因此,如果您将新行添加到表中,则会更新整个表。 我的知识虽然是基于ICEfaces 1.8.2的。     

要回复问题请先登录注册