GWT JSNI布尔型
这是我的密码:GWT JSNI布尔型,gwt,jsni,Gwt,Jsni,这是我的密码: package com.eggproject_hu.WPECommerceAdminSales.client; import java.lang.Boolean; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; public class AblakVillogo { public static Boolean focusedWindow = true;
package com.eggproject_hu.WPECommerceAdminSales.client;
import java.lang.Boolean;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
public class AblakVillogo
{
public static Boolean focusedWindow = true;
private static Boolean init = false;
public static void setFocused(Boolean focus)
{
focusedWindow = focus;
}
public static Boolean getFocused()
{
return focusedWindow;
}
public static void focusVizsgalat()
{
if(focusedWindow == true)
{
GWT.log("igen");
}
else
{
GWT.log("nem");
}
}
public static void init()
{
if(init == false)
{
_init();
}
}
private native static void _init() /*-{
$wnd.jQuery(document).ready(function()
{
$wnd.jQuery($wnd).focus(function()
{
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::focusVizsgalat()(); @com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(true);
$wnd.console.log("focus");
}).blur(function()
{
var ret = false;
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::focusVizsgalat()();
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(false);
$wnd.console.log("blur");
});
});
}-*/;
}
我在浏览器控制台中看到:
未捕获异常:java.lang.IllegalArgumentException:调用参数:类型为boolean的JS值,应为java.lang.boolean
我已经在Chrome和Firefox上进行了测试
有什么问题
谢谢你的帮助 必须将布尔值声明为基本布尔值才能从javascript设置值
您不需要在调用中指定L/java/lang/Boolean,而是Z或者遵循Daniel的建议,但是您必须更改方法以接受布尔参数,即始终使用布尔值,或者您可以在JSNI方法中显式地在java.lang.Boolean中强制转换/装箱布尔值:
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::valueOf(Z)(true));
…即使在您的情况下,由于值是常量,我还是直接使用布尔常量TRUE和FALSE:
话虽如此,但我相信丹尼尔的建议最适合你
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::TRUE);