ApacheWicket:在同一应用程序的独立页面之间通信
在我的wicket页面上有一个链接,可以在另一个选项卡/新窗口中打开第二个页面ApacheWicket:在同一应用程序的独立页面之间通信,wicket,wicket-1.6,Wicket,Wicket 1.6,在我的wicket页面上有一个链接,可以在另一个选项卡/新窗口中打开第二个页面 <a href="/MySecondPage" target="_blank">Click here for second window</a> 这些窗口旨在并行使用(例如,在双监视器环境中)。但我不想在两个屏幕上分散不同的菜单项,所以我希望所有菜单项都保持在MyFirstPage,即使它们只会影响MySecondPage 我的最终目标是单击MyFirstPage上的菜单项,从而在MyS
<a href="/MySecondPage" target="_blank">Click here for second window</a>
这些窗口旨在并行使用(例如,在双监视器环境中)。但我不想在两个屏幕上分散不同的菜单项,所以我希望所有菜单项都保持在MyFirstPage
,即使它们只会影响MySecondPage
我的最终目标是单击MyFirstPage
上的菜单项,从而在MySecondPage
上显示一个新的组件。这可能吗?如何在MyFirstPage
中获取MySecondPage
的java引用,或者建立其他类型的通信?
我在研究过程中发现的所有东西都只适用于模态窗口或Wicket 1.4,但MySecondPage不是模态的。也许Wicket的事件总线是一个选项,请参阅:-章节15.3 Wicket events infrastructure
您可以在MyFirstPage
中发送事件,在会话
或应用程序
中接收事件,然后在那里发送到MySecondPage
<代码>会话
和应用程序
实现IEventSink
:Wicket 6中支持WebSocket:
基本上,您需要将WebSocketBehavior
添加到页面中,以使其可用于来自服务器的消息
另一方面,您可以通过Wicket.WebSocket.send(“客户端发送的消息”)向服务器发送消息代码>
我从来没有厌倦过它,但它听起来很有希望。看起来不错,我可以将我需要的一切传递给
onEvent
-方法MySecondPage
。但是MyFirstPage
的send
-方法需要一个MySecondPage
的引用(参数sink
:事件的接收者IEventSink
的一个实现)-我怎么能得到它呢?很抱歉打扰你,也许我看不到整体情况,但是我仍然不知道如何从Application
或Session
获取对MySecondPage
的引用。基本上,我所知道的关于MySecondPage的所有信息都是URL(没有任何版本id)和它已被打开的事实。我如何在这些类中的任何一个类中获得一个页面
-实例,只需URL或在某个地方传递MySecondPage.class
?或者我可以实现一些AjaxLink
-行为,在点击打开的链接时能够获得某种参考?该死,这将是一个太好的解决方案。无论如何,谢谢你,也许我会找到一些方法来增强这一点:)看看这样的事情:-也许你会找到一些东西。我最终采用了你的解决方案,实现了一个PageRegistry
,其中每个页面在创建时都会自动注册(当然与会话id相关)。现在,当MyFirstPage
想要向MySecondPage
发送消息时,它可以通过PageRegistry
获取MySecondPage
的IEventSink
,反之亦然。这样,每个页面都可以在需要时与其他页面进行通信。有效载荷足够灵活,可以在我需要的时候传递任何东西。它不能解决我的问题。WebSocket连接是特定于页面的,因此具有两个打开页面的客户端有两个连接,每个页面一个。因此,我仍然面临如何将事件从MyFirstPage
获取到MySecondPage
的问题。WebSocket只会帮助我从服务器到客户端获得真正的更新,但要做到这一点,必须先有更新的消息必须到达MySecondPage
,因为只有MyFirstPage
知道这一点……你看过wicket atmosphere吗?因为您需要某种推送行为,所以这似乎是实现它的方法。我的问题不是如何为通信实现推送行为。我能做到。我的问题是如何确定我应该将通信发送到的目标MyFirstPage
还不知道有关MySecondPage的任何信息。我如何解决这个“尚未”问题并获得某种收件人信息?您需要将创建第二个窗口的链接更改为使用构造函数创建MySecondPage
类实例的链接,该构造函数接受作为这些实例之间链接的附加对象。您能否提供一个示例说明如何执行此操作?我知道如何通过链接或javascript打开页面,但不知道如何通过java代码打开页面。这看起来正是我需要的,所以如果你能把它作为答案贴出来,那就太好了。对于之后的交流,我可以使用Robert建议的下面的事件基础结构,我只需要知道如何将MyFirstPage
的引用传递到MySecondPage
(反之亦然)。nvm,我找到了答案。谢谢,这是我要找的最后一个链接:)