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

当对象更改其状态时触发Ajax事件,ajax,jsf,Ajax,Jsf,我有一个小的大学项目,我必须展示某些算法是如何工作的。决定将JSF用于一个简单的webapp,并将所有算法生成的数据保存到数据库中 我对自己说,‘嘿,如果我能一步一步地向用户展示算法是如何工作的,那就太酷了,没有什么花哨的,只是当算法运行时会改变的纯格式文本。使用Ajax的输出文本字段应该可以完成工作,但我不能完全理解某个问题。Ajax在某个事件发生时触发,如“单击”或“键控”,但有没有办法在ManagedBean类中的对象发生更改时触发它 我不知道我是否解释得足够好,下面是我想做的一个例子:

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

我对自己说,‘嘿,如果我能一步一步地向用户展示算法是如何工作的,那就太酷了,没有什么花哨的,只是当算法运行时会改变的纯格式文本。使用Ajax的输出文本字段应该可以完成工作,但我不能完全理解某个问题。Ajax在某个事件发生时触发,如“单击”或“键控”,但有没有办法在ManagedBean类中的对象发生更改时触发它

我不知道我是否解释得足够好,下面是我想做的一个例子:

  • ManagedBean中的ArrayList为空,outputtext不打印任何内容
  • 经过一定时间后,一个新对象保存在ArrayList中,Ajax触发,outputtext打印出其onString()
  • 再次经过一定时间后,在更改之前打印出来的同一个对象,Ajax会触发,输出文本也会相应更改

  • 如果问题不太清楚,我很抱歉,请尽我所能描述它。

    您描述的不再是经典的、客户端触发的AJAX,而是(SSE)。它们通常使用长轮询(只有在发生服务器端事件时才会得到响应的定期客户端请求)来实现

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

    然而,对于您的简单用例,我建议改用轮询。看见主要区别在于服务器端逻辑切换以保留“待显示”字符串/ID/对象的列表。当浏览器客户端轮询服务器(调用侦听器方法)时,将第一项分配给支持bean中的
    String
    字段,并让客户端重新呈现显示该
    String
    的区域

    请注意,您可以在普通JSF-2中实现这一点,不需要Primefaces