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中指定的所有规则我是AFAIK。
修改:
这有效:
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);
});
});
}-*/;
答案 0 :(得分:1)
您不能eval
JSNI调用Java - 该代码不是真正的JavaScript,而是JS和Java在GWT中交互的一部分。最终工作的方式是重写这些调用,以便它们调用真正的JavaScript函数。