1

Eclipse で App Engine にデプロイすると適切に動作する小さな Web アプリがあります。ただし、アプリを Tomcat サーバーにデプロイしようとすると、エラーが発生します。

war フォルダーの内容を Tomcat のデフォルトの ROOT フォルダーに直接コピーしました。次に、Eclipse 内の外部サーバーでアプリを実行します。

その時点まではすべて正常に機能します。アプリはブラウザーのキャッシュから直接読み込まれます。

問題は次のとおりです。

GWT 側で JSNI を介して実現されているアプリの一部の機能をクリックすると、Google Chrome開発コンソールに「Uncaught ReferenceError: function is not defined」と表示されます。エラーが外部 JS コード内の JS 呼び出し元から発生していることを理解しています。呼び出し元は、GWT クライアント側のメソッド/関数を呼び出します (そのため、ext.JS コードで定義されていません)。

この問題を解決する方法について何か提案はありますか?

4

1 に答える 1

3

外部の js ファイルを必要とする追加のモジュールはありますか? 一部のモジュールでは、js ファイルを war に含め、ルート .html ファイルに含める必要があります。ベースの js 関数を持たないライブラリを使用している可能性があります。

これを .gwt.xml ファイルに追加して、スタック トレースをオンにすることができます。

<set-property name="compiler.stackMode" value="emulated"/>
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/> 
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/> 

setUncaughtException ハンドラーを試して、実動モードでスローされている例外を確認することもできます。エミュレートされたスタック トレースをオンにすると、コードの行番号を含むバックトレースを取得できるはずです。開発モードほどではありませんが、デバッグには非常に便利です。

GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler()) {
    @Override
    public void onUncaughtException(Throwable cause) {
        logger.log(Level.SEVERE, "OOPS", cause);
    }
}

注 アクセスできるものを使用するようにロガーが構成されていることを確認してください。firebug やリモート ロギング サーブレットと同様です。

私は現在、Eclipseを使用して本番および開発モードでTomcat 7を使用しています。Eclipse でサーバーの tomcat インスタンスを構成し、「Run as WebApplication on External Server」を使用できます。これにより、開発モードで例外を確認できます。

また、プロダクション モードの場合は ?gwt.codesvr=127.0.0.1:9997 がないことを確認してください。開発コード サーバーを実行していない限り、これも問題を引き起こします。

于 2012-08-23T21:15:57.743 に答える