当对象更改其状态时触发Ajax事件

时间:2014-10-17 18:31:54

标签: ajax jsf

我有一个小型大学项目,我必须展示某些算法是如何工作的。决定将JSF用于简单的webapp并将所有算法生成的数据保存到数据库中。

我心里想着'嘿,如果我可以向用户展示算法如何逐步工作,没有什么花哨的,只是简单的格式化文本,当算法完成它的时候就会改变,这会很酷。使用Ajax的输出文本字段应该完成工作!'但是我无法完全理解某个问题。当某个事件发生时,Ajax会触发,例如“click”或“keyup”,但是当我的ManagedBean类中的对象发生更改时,有没有办法让它触发?

不知道我是否解释得很好,所以这里有一个我想做的例子:

  1. ManagedBean中的ArrayList为空,outputtext不打印任何内容
  2. 经过一段时间后,一个新对象保存在ArrayList,Ajax触发器中,输出文件打印出它的onString()
  3. 经过一段时间后,更改之前打印出来的相同对象,Ajax触发器和输出文本也相应地更改
  4. 如果问题不是很明确,我很抱歉,试着尽我所能来描述它。

1 个答案:

答案 0 :(得分:0)

您所描述的不再是经典的,客户端触发的AJAX,而是称为server-sent events(SSE)。它们通常使用长轮询实现(定期客户端请求只有在服务器端事件时才会得到答案)。

您最喜欢的JSF工具包可能以“Push”的名称支持它。这是一个Primefaces example

但是,对于您的简单用例,我建议使用轮询。见this example。主要区别在于您的服务器端逻辑切换以保留“要显示”字符串/ ids /对象的列表。当您的浏览器客户端轮询服务器(调用侦听器方法)时,将第一个项目分配给辅助bean中的String字段,并让您的客户端重新呈现显示此String的区域。

请注意,您可以在简单的JSF-2中执行此操作,不需要Primefaces。