ApacheWicket:在同一应用程序的独立页面之间通信

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

在我的wicket页面上有一个链接,可以在另一个选项卡/新窗口中打开第二个页面

<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,我找到了答案。谢谢,这是我要找的最后一个链接:)