Package com.smartgwt.client.docs
Interface JavaScriptToJavaConversion
public interface JavaScriptToJavaConversion
Converting JavaScript objects to Java
Converting between native JavaScript objects and GWT Java objects is something the Smart GWT framework needs to do very frequently (see alsoJavaToJavaScriptConversion
).
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 native JS objects to GWT Java objects. This article describes
the common rules used when such conversions are run.- Conversion is recursive; nested JavaScript objects 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 JS object that contains circular references, your program will crash
- This general prohibition of circular references includes native browser objects such as HTML elements
retrieved by the
getElementById()
API, amd common objects likewindow
and the JSNI$wnd
object. These DOM elements contain references to both parent and children, which are inherently circular - null values, including
undefined
, are returned as null - JavaScript strings are returned as Java
String
s - JavaScript numbers are returned as
- Java
Double
s if the number contains a decimal point, else - Java
Integer
s if the number is in the range of an Integer (between -2147483648 and 2147483647 inclusive), else - Java
Long
s
- Java
- JavaScript dates are returned as
java.util.Date
s - JavaScript arrays are converted by converting each array element according to the other rules described here, and then
converting the results into either a Java
Object[]
or ajava.util.ArrayList
, depending on the value of the "listAsArray" parameter (an array if that param is true, anArrayList
if it is false) - JavaScript objects are converted as follows:
- If the GWT condition "
object instanceof JavaScriptObject
" is true, the object itself is returned - If Smart GWT detects that the object has a GWT Java wrapper object created by Smart GWT, that GWT wrapper object is returned
- If the object has a "_constructor" property set to "DateRange" convert to
DateRange
- If the object has a "_constructor" property set to "RelativeDate" convert to
RelativeDate
- If the object is an instance of the SmartClient
Canvas
class, return the result of callingCanvas.getById(java.lang.String)
. This will result in a Smart GWT Java object equivalent to the SmartClient Canvas - for example a SmartClientListGrid
will be returned as aListGrid
- If the object has a "name" property and a "form" property such that
isc.isA.DynamicForm(object.form)
is true:- Create a DynamicForm object by passing the object's "form" property as a parameter to
DynamicForm.getOrCreateRef(JavaScriptObject)
- Return the result of calling getField() on that form, passing in the object's "name" property
- This process means that SmartClient FormItems are returned as equivalent Smart GWT objects (subclasses of
FormItem
)
- Create a DynamicForm object by passing the object's "form" property as a parameter to
- If the SmartClient call "
isc.isAn.Instance(object)
" returns true and the object has agetClassName()
method, returns the result of passing the object as a parameter tocreateInstance()
- If the SmartClient call "
isc.isA.Class(object)
" returns true and the object has agetClassName()
method, returns the equivalent Java class if it exists; otherwise returns null, callinggetSmartGWTClass()
- If none of the above conversions apply, the JavaScript object will be converted to a Java
Map
by running each property of the JavaScript object through the conversion process. Note, if SmartClient detects that the object is the JS form of aTreeNode
(which is done by checking for the presence of an internal-only property), the SmartClient methodisc.Tree.getCleanNodeData()
is called on it before conversion starts; this obtains a clean version of the node data, free of any additional properties scribbled on by the Tree
- If the GWT condition "