Ajax 从JMS侦听器类以编程方式更新特定视图

Ajax 从JMS侦听器类以编程方式更新特定视图,ajax,jms,push,listener,openxava,Ajax,Jms,Push,Listener,Openxava,我能够将ActiveMQ集成到OpenXava应用程序中,并创建一个JMS使用者。现在,我需要用接收到的数据更新某些瞬态视图 该消息,它有几个问题需要考虑,例如…如何从JMS侦听器java类出发,将更改推送到当前视图。。。及 假设特定视图是当前视图!!!,但是当前视图可以是整个应用程序中几个可能的视图中的任意一个。。。所以所以 然后我确实认为,我会将JMS消息持久化到某个实体中(作为数据库中的临时存储),即使这会导致低性能,但之后 那个如果某个用户正在查看瞬态视图,我将如何推动最近的更改 我曾经

我能够将ActiveMQ集成到OpenXava应用程序中,并创建一个JMS使用者。现在,我需要用接收到的数据更新某些瞬态视图 该消息,它有几个问题需要考虑,例如…如何从JMS侦听器java类出发,将更改推送到当前视图。。。及 假设特定视图是当前视图!!!,但是当前视图可以是整个应用程序中几个可能的视图中的任意一个。。。所以所以 然后我确实认为,我会将JMS消息持久化到某个实体中(作为数据库中的临时存储),即使这会导致低性能,但之后 那个如果某个用户正在查看瞬态视图,我将如何推动最近的更改

我曾经使用一些支持ajax的JSF实现来构建我的WebApp,然后我可以在JMS侦听器中接收消息,然后获得一个JSF 托管bean引用并使用ajaxpush刷新一个或多个用户可以打开的所有会话,因此这总是会产生一个 一种实时应用程序,它更新任何打开的视图(如果该视图是用户正在观看的视图)

那么,有没有办法在我的OX应用程序中使用JMS侦听器类来实现这一点


提前感谢,

一个选项可以使用JavaScript定期调用,以了解是否在表中添加了新记录或其他内容,以及是否正在刷新大小写

如果您是liferay,您可以使用JavaScript代码在该页面中创建一个portlet。这段代码可以使用DWR进行调用,如果有新数据,它可以直接调用“CRUD.refresh”操作

大概是这样的:

refreshData = function() {
   openxava.executeAction('YourApplication', 'YourModule', '', false, 'CRUD.refresh')
   setTimeout('refreshData()', 5000);
}
setTimeout('refreshData()', 5000);
我没有测试这段代码,所以它肯定不能正常工作。把它当作一个想法


真的,这是一个肮脏的把戏。理想的情况是OpenXava将直接支持comet,您只需在服务器中调用一个方法就可以实现这一点。你认为向OX worth添加comet支持吗?

嗨,贾维尔,我不知道如何在我的OX应用程序中实现这个肮脏的把戏。。。我已经用其他工具构建了Ajax推送应用程序,并且生成了很好的应用程序,只刷新页面中需要更新的部分或组件,避免对整个页面进行定期更新,甚至可能是不需要的更新,当然,更新来自某个服务器的事件。我敢肯定,如果OX能够支持Comet,那一定会很棒!。嗨@HayrolR,试着做这个把戏,如果你有困难,我会帮助你。从定期调用“CRUD.refresh”的JavaScript代码开始。这不是最佳方案,但很容易实现。之后,添加对DWR的呼叫以请求更改,并仅在需要时调用“CRUD.refresh”。嗨@HayrolR,关于向OpenXava添加Comet支持,我们需要一名志愿者。您是否愿意将此功能添加到OX并提供它?好的,Javier,我将尝试它,但是我应该在哪里添加JavaScript代码?您能给我举个例子吗?。顺便说一句,能为Comet做些贡献真是太好了,即使我现在刚刚进入OX,我对它的发展方式也不太了解。那么,是否有一些关于?的文档,也许我可以加快我的学习速度。您可以将JavaScript代码放在自定义portlet中,并将该portlet放在OX模块的同一页面中。如果您想在没有门户的情况下执行应用程序,可以将JavaScript代码放在文件夹web/xava/editors/JS中的JS文件中