Package com.smartgwt.client.docs

# Interface JavaToJavaScriptConversion

public interface JavaToJavaScriptConversion

### Converting GWT Java objects to JavaScript

Converting between native JavaScript objects and GWT Java objects is something the Smart GWT framework needs to do very frequently (see also `JavaScriptToJavaConversion`). It is less common for application code to do such conversions, but the need can arise. The `JSOHelper` class contains many utility methods for sophisticated conversion from GWT Java objects to native JS objects. This article describes the common rules used when such conversions are run.

- Conversion is recursive; nested Java Maps, Collections and arrays will have their members converted as well
- Circular references (where an object is referred to by its own children, grandchildren, etc) are not tolerated. If you try to convert a Java object that contains circular references, your program will crash
- null is returned as null
- Strings are converted to JavaScript Strings
- Booleans are converted to JavaScript booleans
- Numeric data types - Integer, Long, Float, Double and all other Number subclasses - are converted to JavaScript `Number`s. Note that it is not possible to accurately represent values with an absolute value greater than 9,007,199,254,740,992 in a JavaScript `Number` (some people find it easier to remember "15 decimal digits", from the rounded-down value 999,999,999,999,999). This is not a problem for most Java numeric types, but Java `Long`s can accurately represent values larger than this; converting such a large value to a JavaScript `Number` introduces a loss of precision in the least significant digits. For example, the Java value `Long.MAX_VALUE` is 9223372036854775807. This value will be represented as 9223372036854776000 when converted to a JavaScript `Number`
- `ValueEnum`s are converted to the string representation obtained by calling their `getValue()` method
- `java.util.Date`s (and subclasses) are converted as JavaScript `Date`s
- `RelativeDate`s are converted to the string representation obtained by calling their `getValue()` method
- Java arrays are converted to JavaScript arrays, with members recursively converted to the equivalent JavaScript type using the rules described in this article
- Java Collections (Lists and Sets) and Iterators are converted to JavaScript arrays, with members recursively converted to the equivalent JavaScript object using the rules described in this article
- Java Maps are converted to JavaScript Objects with each key mapped to a property on the object. Property values are recursively converted to the equivalent JavaScript object using the rules described in this article

Other Java Objects, including POJOs, instances of `Record` and its subclasses, and instances of `Canvas` and `FormItem` are stored on the underlying data object unconverted. Developers can retrieve such values via `DataClass.getAttributeAsObject(String)`.