It would be nice to have a way to convert arrays and string to\from Js shipped by the compiler
A documented way to pass java.lang.String or byte[] to JS. On Thursday, May 19, 2016 at 11:06:12 AM UTC+3, Vassilis Virvilis wrote: > > I agree > > I am just saying that java String is not the same as the js String. So > String[] cannot be converted easily to a js string array. > > I agree that arrays in other @JsType objects works as expected. > > The main difference if I understand your point of view is that I have to > create a js string array from java where in your case it is handed to you > by javascript and you have to cope with that. > > Thanks for the insights > > > > On Wed, May 18, 2016 at 11:25 PM, Pablo Nussembaum <[email protected] > <javascript:>> wrote: > >> If you have a JsInterop object that returns an [] >> you can do: >> >> Object o = jsInteropObject.method(); //this in declared as "public Object >> method();" in your @JsType object >> JsArray<JavaScriptObject> array = JsInteropHelper.cast(o); >> >> >> >> On 18/05/16 11:38, Vassilis Virvilis wrote: >> >> Hi >> >> @Pablo, I don't see how the example you gave relates to arrays and >> jsinterop >> >> @Thomas >> I am not exactly sure about but looks like that String[] is an array of >> char arrays instead of native javascript Strings. For example this also >> works. >> >> >> config.buttons = new JsString[] {Util.getString("copyHtml5")}; >> >> Where JsString and Util.getString are: >> >> @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = >> "String") >> public static interface JsString { >> } >> >> public static native JsString getString(String string) /*-{ >> var l = string.length; >> var s = ""; >> for (var i = 0; i < l; i++) { >> s += string[i]; >> } >> return s; >> }-*/; >> >> Thanks in advance. >> >> >> >> >> >> On Thu, May 12, 2016 at 2:46 PM, Pablo Nussembaum <[email protected] >> <javascript:>> wrote: >> >>> Hi Vassilis, >>> I have been using JsInterop for managing IndexedDB stores and I have >>> created this [1] helper class for casting back and forth js to java. The >>> main issue is that in GWT there are two Object hiearchies one from java and >>> js, GWT makes are really job hiding that detail, but with JsInterop the >>> difference leaks ;-) >>> >>> [1] >>> https://github.com/bauna/gwt-indexeddb/blob/devel/gwt-indexeddb-core/src/main/java/org/nuvola/indexeddb/client/JsInteropHelper.java >>> >>> Let me know if want examples where I'm using this helper class. >>> >>> Regards, >>> -- >>> Pablo >>> >>> >>> On 12/05/16 07:43, Vassilis Virvilis wrote: >>> >>> Thanks for all the answers >>> >>> The Collection#toArray does not work in my case because dataTables.net >>> are a bit sensitive in the input. It stumbles upon java.lang stuff later on. >>> Here >>> >>>> buttons = new String[] {"copyHtml5"}; >>>>> >>>> while buttons2 is the correct one created with your previous >>> suggestion. >>> >>> 1. buttons: >>> 1. 0:"copyHtml5" >>> 2. __elementTypeCategory$:6 >>> 3. __elementTypeId$:2 >>> 4. java_lang_Object__1_1_1clazz:java_lang_Class_Class__V >>> 5. java_lang_Object_castableTypeMap:Object >>> 6. java_lang_Object _typeMarker: >>> com_google_gwt_lang_Runtime_typeMarkerFn__V() >>> 7. length:1 >>> 8. __proto__:Array[0] >>> 2. buttons2:Array[1] >>> 1. 0:"copyHtml5" >>> 2. length:1 >>> 3. __proto__:Array[0] >>> >>> About Array vs [] >>> I am not js expert and looking for the difference I hit this >>> http://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar >>> Check this answer >>> http://stackoverflow.com/questions/931872/what-s-the-difference-between-array-and-while-declaring-a-javascript-ar/1273936#1273936 >>> >>> So I though if that could work with GWT and I tried it. >>> >>> Also thanks for the link I bookmarked it. >>> >>> >>> On Thu, May 12, 2016 at 1:20 PM, Thomas Broyer < <javascript:> >>> [email protected] <javascript:>> wrote: >>> >>>> >>>> >>>> On Thursday, May 12, 2016 at 11:51:11 AM UTC+2, Vassilis Virvilis >>>> wrote: >>>>> >>>>> Thomas thanks, >>>>> >>>>> Wow I did this and it works. But it is crazy. Cr is for crazy. Kudos >>>>> to jsinterop guys though. >>>>> >>>>> @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "[]") >>>>> >>>>> >>>> You should probably use "Array" rather than "[]" >>>> >>>> >>>>> public interface CrJsArray<T> { >>>>> >>>>> public void push(T value); >>>>> >>>>> @JsProperty >>>>> public int getLength(); >>>>> } >>>>> >>>>> >>>>> I tried your suggestion to cast and __also works__ (eclipse complains >>>>> about but with (JavaScriptObject) (Object) my_native_object) it works and >>>>> it is definitely better. >>>>> >>>> >>>> Also, for converting from a java.util.Collection to an array, how about >>>> simply using Collection#toArray? (and then passing the array to JS through >>>> JsInterop) >>>> >>>> >>>>> Questions >>>>> 1) Is JavaScriptObject scheduled for deprecation? >>>>> >>>> >>>> Yes, it'll be replaced with JsInterop. >>>> >>>> >>>>> 2) Should a native type be able to extend JavascriptObject. Because >>>>> right now (2.8pre1) fails at run time. That would make casting a bit >>>>> saner. >>>>> Should I report it somewhere? >>>>> >>>> >>>> This is probably on-purpose. >>>> >>>> >>>>> I tried to look for the reference you gave but I didn't find it. Wrong >>>>> keywords maybe... >>>>> >>>> >>>> I found this: >>>> https://groups.google.com/d/topic/google-web-toolkit/nmBAOX4vcSo/discussion >>>> Not exactly what I remembered, but touches similar points. >>>> >>>> >>>>> >>>>> On Thu, May 12, 2016 at 12:20 PM, Thomas Broyer < <javascript:> >>>>> [email protected] <javascript:>> wrote: >>>>> >>>>>> That question came up already in the forum or in GWT-Contrib (try to >>>>>> search the archive), and I seem to recall that Goktug said you could >>>>>> cast >>>>>> @JsType(isNative=true) objects to/from JavaScriptObject, so you could >>>>>> use >>>>>> JsArray (and JsonUtils.safeEval). I think you can also cast to/from an >>>>>> array of @JsType(isNative=true), so if you don't need to alter the size >>>>>> of >>>>>> the JS array you can then use the bracket operators on a Java array (and >>>>>> cast from/to a JavaScriptObject). >>>>>> This is only out of memory, please double check from the forum >>>>>> archives. >>>>>> >>>>>> >>>>>> On Thursday, May 12, 2016 at 10:47:51 AM UTC+2, Vassilis Virvilis >>>>>> wrote: >>>>>>> >>>>>>> Hi again, >>>>>>> >>>>>>> I am trying to convert a jre collection or build a jsArray with a >>>>>>> isNative=true type. >>>>>>> >>>>>>> Unfortunately this is not possible because JsArray requires >>>>>>> JavascriptObject which is invcompatible (complie time error) with >>>>>>> native >>>>>>> classes. >>>>>>> >>>>>>> Any ideas? >>>>>>> >>>>>>> I looked on deep dive jsinterop from Ray Cromwell and it says that >>>>>>> there is not a clean way for jsinterop1 to align collections. Ok I get >>>>>>> that >>>>>>> - but there must be a way even if not the nicest/cleanest one. >>>>>>> >>>>>>> Otherwise looks like I have to create my own @jsinteroped MyJsArray >>>>>>> which looks wrong. >>>>>>> >>>>>>> -- >>>>>>> Vassilis Virvilis >>>>>>> >>>>>> -- >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "GWT Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/d/optout.
