Java GWT项目间沟通

Java GWT项目间沟通,java,css,gwt,stylesheet,webclient,Java,Css,Gwt,Stylesheet,Webclient,我们有一个大型GWT项目和许多较小的GWT子项目 基本上,大型控制器项目调用较小的项目 通过多种方式,如第页中所示,将一些整合到iFrame中, 有些是通过单击URL并在新窗口中打开项目来显示的 要求是动态更改Css,这在主项目中是可能的, 只需动态更改包含样式表url的链接标记的href 是否有可能将此变更也传播到子项目中? 或者用更宽泛的术语提问, 如何在GWT中实现项目间通信?如果不同GWT应用程序的域相同,则浏览允许您跨iFrame调用Javascript代码 使用JSNI,您可以在窗口

我们有一个大型GWT项目和许多较小的GWT子项目 基本上,大型控制器项目调用较小的项目 通过多种方式,如第页中所示,将一些整合到iFrame中, 有些是通过单击URL并在新窗口中打开项目来显示的

要求是动态更改Css,这在主项目中是可能的, 只需动态更改包含样式表url的链接标记的href

是否有可能将此变更也传播到子项目中? 或者用更宽泛的术语提问,
如何在GWT中实现项目间通信?

如果不同GWT应用程序的域相同,则浏览允许您跨iFrame调用Javascript代码


使用JSNI,您可以在窗口对象上注册调用GWT应用程序的方法,使用JSNI,其他项目可以调用此方法。

如果所有应用程序都来自同一个域,您可以将样式表的名称存储在cookie中。然后,每个应用程序将使用cookie来选择适当的样式表

String theme = Cookies.getCookie("THEME");
if (theme == null) {
    theme = "default";
}

Element e = DOM.createElement("link");
DOM.setElementProperty(e, "rel", "stylesheet");
DOM.setElementProperty(e, "href", GWT.getModuleBaseURL() + currentTheme + 
    ".css");
DOM.appendChild(getHead(), e);

private native Element getHead() /*-{
    return $doc.getElementsByTagName('head')[0];
}-*/;

您好,我觉得您误解了这个问题,Cookies是存储常见内容的好方法,但我这里的问题是调用,家长应该调用/通知孩子将其Css更改为其他内容。还是很好的建议,+1很好的解决方案,正在努力。我已经实现了一件事,父级可以通过url参数通知子级,因为它确实在iFrame中加载它。但是,对于刷新/更改通知,我正在考虑实施您的方法+1对于这个伟大的解决方案,jsni方法在一个senario不同的窗口中失败了。我有一个登录模块,成功后将页面url更改为另一个gwt模块。在这种情况下,javascript全局变量值丢失[有意义,因为窗口本身已经更改,那么window.variable不再在作用域中],在这种情况下我应该怎么做?使用cookie?主框架可以侦听重新加载事件并重新注册回调。客户端可以在加载时放入一个方法,主框架可以调用该方法。有很多选择。