2012-03-03 59 views
2

更新目前,我有一个工作流程是这样的:JSF 2的DataTable通过AJAX

  1. 用户输入手机号码列表到一个文本。
  2. 用户选择提交表单的选项(非AJAX)。
  3. 系统处理这些ID,在新页面中向用户显示一个包含所有手机号码的JSF 2 DataTable。
  4. 系统继续检索有关每个手机号码的信息(一次一个号码)并将其更新到DataTable中。

目前,我不知道我应该做的,以实现在步骤3

敬请指教或链接我给你很多都遇到类似我要求任何教程显示DataTable之后第4步。

回答

2

有几个选项可供选择4.独特的选择是让客户端启动更新或让服务器执行此操作。

在第一种情况下,您将查看传统的AJAX,并且您可以使用AJAX轮询组件。既PrimeFaces和RichFaces的有这样的组分(号码:轮询和A4J:轮询分别)

默认AJAX请求经由单一队列串行化,因此,“一次一个号码” -requirement将自动满足。既然你只想轮询一次,你应该在收到结果后立即停止轮询。

另一种选择是让服务器将数据推送到客户端(有时称为Reverse AJAX)。在你的情况下,当获取带有手机号码的初始表的数据时,你将立即异步查询所有额外的信息。只要服务器检索到该信息,它就会将其发送到客户端的数据表中。你可以再一次做到这一点,或者如果它是一个查询,那么一次更新整个表可能会更高效。

对于推送,PrimeFaces和RichFaces都有可用的组件(p:push vs a4j:push)。

请参见:

+0

阿尔扬您好,感谢应对这一点。它为每个号码执行的处理包括与几个外部系统的接口,并且可能每个都需要几秒钟才能完成,因此需要根据每个号码更新用户以获得更好的用户体验。我会很快查看您的链接,即时使用Primefaces组件库。 – 2012-03-03 12:11:18

+0

想知道,你认为Primefaces Push可以更新数据表吗?从推送示例看来,他们使用JavaScript来手动处理推送事件。 – 2012-03-03 14:53:51

+1

的确,PrimeFaces Push似乎还没有进入其Prime。理论上你可以混合使用RichFaces和PrimeFaces,但由于有一个民意调查解决方案,你可能会更好地使用它。 – 2012-03-03 16:11:21