2011-06-06 61 views
2

這裏是我的代碼: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; 
    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中測試過。

什麼問題?

感謝您的幫助!

回答

4

要麼跟上丹尼爾的建議,但你必須改變你的方法採取boolean參數(即使用boolean全部通過的方式),或者你可以明確地投/盒在java.lang.Boolean中的布爾在JSNI方法:

@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::valueOf(Z)(true)); 

......即使你的情況,因爲該值是恆定的,我寧願直接使用Boolean常量TRUEFALSE

@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::TRUE); 

話雖這麼說,我相信丹尼爾的建議是你的最佳選擇。

6

您必須聲明布爾作爲原始布爾從javascript

設定值和你不需要specifiy L /爪哇/郎/布爾在呼叫,但ž代替