GWT JSNI BOOLEAN - PullRequest
       3

GWT JSNI BOOLEAN

2 голосов
/ 07 июня 2011

Вот мой код:

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: вызвать аргументы: JS значение типа boolean, ожидаемый java.lang.Boolean

Я тестировал в Chrome и Firefox.

В чем проблема?

Спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 07 июня 2011

Вы должны объявить логическое значение как примитивное логическое значение, чтобы установить значение из javascript

и вам не нужно указывать L / java / lang / Boolean в вызове, а вместо Z

4 голосов
/ 07 июня 2011

Либо следуйте совету Даниэля, но затем вы должны изменить свой метод так, чтобы он принимал аргумент boolean (т. Е. Использовать boolean на всем протяжении), либо вы можете явным образом привести / поменять логическое значение в java.lang.Boolean в вашем методе JSNI:

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

… хотя в вашем случае, поскольку значение является константой, я бы предпочел напрямую использовать Boolean константы TRUE и FALSE:

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

С учетом сказанного, я верю, что совет Даниила - ваш лучший выбор.

...