如何将GWT应用程序的部分提取到单独对话框库中
我试图将GWT应用程序的各个部分提取到许多可以从php调用的单独对话框中 现有状态: 我们有一个GWT应用程序,作为战争部署到JBoss。 该应用程序有一个单一的模块和一个单一的入口点。 主JSP设置环境,然后有一些JS使用document.write()加载.nocache.JS; 入口点的onModuleLoad()创建一个面板来填充浏览器,并使用RootPanel.get(“root”).add()将其添加到根目录中; 当某些事件发生时(例如,用户按下按钮),我们通过建立一个子类并调用center()或setVisible()来弹出一个对话框 所需状态: 我们想要一个具有多个页面的php应用程序,以便能够调用各种DialogBox子类 我认为php端应该使用使用document.write()的JS函数调用; 至于GWT方面,我看到的选项有:如何将GWT应用程序的部分提取到单独对话框库中,gwt,module,entry-point,Gwt,Module,Entry Point,我试图将GWT应用程序的各个部分提取到许多可以从php调用的单独对话框中 现有状态: 我们有一个GWT应用程序,作为战争部署到JBoss。 该应用程序有一个单一的模块和一个单一的入口点。 主JSP设置环境,然后有一些JS使用document.write()加载.nocache.JS; 入口点的onModuleLoad()创建一个面板来填充浏览器,并使用RootPanel.get(“root”).add()将其添加到根目录中; 当某些事件发生时(例如,用户按下按钮),我们通过建立一个子类并调用ce
有没有人对这里的最佳实践有任何经验或理解?如果我理解正确,您需要从Javascript调用GWT方法。 您可以使用JSNI。 但我认为你应该在gwt方面尝试gwt exporter。 为GWT模块创建JS_API是一个简单的GWT模块 不是假装是最佳实践,只是简单的例子 在服务器端,您包括一个现有的GWT模块,每个页面上都有对话框。 您需要修改此GWT模块或像这样创建新模块
public class GwtModule implements EntryPoint {
@Override
public void onModuleLoad() {
// exportable class
DialogBoxManager dbm = new DialogBoxManager();
// export all Exportable classes of module
ExporterUtil.exportAll();
// needed cause JS_API will be available only after the GWT is loaded
onLoad();
}
// call when GWT module loaded
private native void onLoad() /*-{
$wnd.loaded();
}-*/;
DialogBoxManager看起来像这样
@Export
@ExportPackage("pkg")
public class DialogBoxManager implements ClickHandler, Exportable {
private DialogBox db;
public DialogBoxManager() {
this.db = new DialogBox();
}
@Export("showDB")
public void showDialog() {
db.setVisible(true);
db.center();
db.show();
}
@Override
public void onClick(ClickEvent event) {
showDialog();
}
}
function showDB() {
if (dbManager != null) {
dbManager.showDB();
}
}
@Export(“show”)、@ExportPackage(“pkg”)等中的字符串值。注释将在带注释的GWT方法的JS_API调用中使用(您也可以导出字段)。
您可以只使用@Export(就像我对DialogBoxManager所做的那样)
当GWT模块加载到您的JS库中时,您可以实现JS_API成员的初始化或您需要的初始化
var dbManager = null;
...
function loaded() {
dbManager = new pkg.DialogBoxManager();
}
然后像这样调用JS_API
@Export
@ExportPackage("pkg")
public class DialogBoxManager implements ClickHandler, Exportable {
private DialogBox db;
public DialogBoxManager() {
this.db = new DialogBox();
}
@Export("showDB")
public void showDialog() {
db.setVisible(true);
db.center();
db.show();
}
@Override
public void onClick(ClickEvent event) {
showDialog();
}
}
function showDB() {
if (dbManager != null) {
dbManager.showDB();
}
}
谢谢我想我在这里找到了一个更简单的解决方案:这样我就可以在onModuleLoad()中编写:$wnd.computeLoanInterest=$entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI));如果新项目全部使用GWT编写,那么JSNI是最佳选择。另外,最好是一个模块在每个主机页上聚合其他模块。但是你可以使用更多,如果你想。