我有一个小型大学项目,我必须展示某些算法是如何工作的。决定将JSF用于简单的webapp并将所有算法生成的数据保存到数据库中。
我心里想着'嘿,如果我可以向用户展示算法如何逐步工作,没有什么花哨的,只是简单的格式化文本,当算法完成它的时候就会改变,这会很酷。使用Ajax的输出文本字段应该完成工作!'但是我无法完全理解某个问题。当某个事件发生时,Ajax会触发,例如“click”或“keyup”,但是当我的ManagedBean类中的对象发生更改时,有没有办法让它触发?
不知道我是否解释得很好,所以这里有一个我想做的例子:
如果问题不是很明确,我很抱歉,试着尽我所能来描述它。
答案 0 :(得分:0)
您所描述的不再是经典的,客户端触发的AJAX,而是称为server-sent events(SSE)。它们通常使用长轮询实现(定期客户端请求只有在服务器端事件时才会得到答案)。
您最喜欢的JSF工具包可能以“Push”的名称支持它。这是一个Primefaces example。
但是,对于您的简单用例,我建议使用轮询。见this example。主要区别在于您的服务器端逻辑切换以保留“要显示”字符串/ ids /对象的列表。当您的浏览器客户端轮询服务器(调用侦听器方法)时,将第一个项目分配给辅助bean中的String
字段,并让您的客户端重新呈现显示此String
的区域。
请注意,您可以在简单的JSF-2中执行此操作,不需要Primefaces。