1

私はGWTアプリにMozillaのペルソナを実装しようとしています。これは、テスト用に設定したダミーアプリのコードの一部です。

public class OpenId implements EntryPoint {

private native void callWatch(String email)
/*-{
    $wnd.navigator.id.watch({
        loggedInUser: email,
        onlogin: function(assertion){
            $wnd.alert("Calling method");
            this.@com.gallup.openid.client.OpenId::processLogin(Ljava/lang/String;)(assertion);
            $wnd.alert("Called Java Method");
        },
        onlogout: function(){alert("Logged Out!");}
    });
}-*/;

private void processLogin(String assertion){
    Window.alert("Logged in!");
    personaStatus.setText("Log In Complete.");
}
}

メソッドを呼び出すと、callWatch「メソッドの呼び出し」アラートボックスのみが表示されます。他のものはどちらも呼び出されません。したがって、何らかの理由で、コードは最初のアラートのすぐ下のJSNI呼び出しで停止しているように見えます。ただし、開発モードではエラーは発生しません。

processLoginメソッドが呼び出されない理由がわかりません。

Googleのドキュメントに正しく従っていると思いました。

書いてみました

this.@com.gallup.openid.client.OpenId::processLogin(Ljava/lang/String;)(assertion);

この投稿のためOpenID.@...に。instance.@...

他に何を試すべきかわかりません。

4

1 に答える 1

4

この変数thisは、それをすぐに囲む関数 (この場合は onlogin JavaScript 関数) を指します。一時変数を使用する必要がありthatます (ちなみに、典型的な JavaScript イディオムです)。

private native void callWatch(String email)
/*-{
  var that = this;
   ...
    onlogin: function(assertion){
      that.@com...

$entry(...)UncaughtExceptionHandler を登録した場合は、エラー メッセージが表示されるように、 を使用するのが理想的です。

参照: https://stackoverflow.com/a/5235580/291741

于 2012-11-10T01:20:45.597 に答える