0
public void query(String sql, QueryResult queryResult) {
    q = queryResult;
    realQuery(sql, conString);
}

public static native void realQuery(String sql, String conString) /*-{
    $wnd.pg.connect(conString, function(err, client) {
        client.query(sql, function(err, result) {
            console.log(result.rows);
            var code = "@db.tud.bp.werkstatt.client.PgClient::result(Ljava/lang/String;)(" + '"' + JSON.stringify(result.rows).replace('"','\\"') + '"' + ");";
            console.log(code);
            eval(code);
        });
    });
}-*/;

次のエラーが表示されます。

com.google.gwt.event.shared.UmbrellaException: Exception caught: (Error) 
@de.tud.bp.werkstatt.client.PgClient::realQuery(Ljava/lang/String;Ljava/lang/String;)
([string: 'SELECT age FROM person WHERE name='Ayeb'', string: '/rest/query']): 
  unrecognized calling format
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)

「認識されない呼び出し形式」とは何を意味し、検索しても Google の結果が得られないのはなぜですか?

3 行目で間違った方法で JSNI 関数を呼び出しているのではないかと思います。しかし、ドキュメントhere で指定されているすべてのルールに従っていることがわかります。

編集

これは機能します:

public static native void realQuery(JavaScriptObject parsed) /*-{
    var sql = parsed[0];
    var conString = parsed[1];
    $wnd.pg.connect(conString, function(err, client) {
    });
}-*/;

これはしません:

public static native void realQuery(JavaScriptObject parsed) /*-{
    var sql = parsed[0];
    var conString = parsed[1];
    $wnd.pg.connect(conString, function(err, client) {
        client.query(sql, function(err, result) {
            console.log(result.rows);
        });
    });
}-*/;
4

1 に答える 1

1

evalJSNI を Java に呼び出すことはできません。そのコードは実際の JavaScript ではありませんが、GWT 内で JS と Java が対話する方法の一部です。これが最終的に機能する方法は、これらの呼び出しが実際の JavaScript 関数を呼び出すように書き換えられることです。

于 2012-11-05T23:58:15.313 に答える