Skip to content
Ralph Schaer edited this page Oct 2, 2012 · 21 revisions

Since 1.2.1

ExtDirectSpring contains a simple helper class that inspects java classes and create the corresponding Javascript code for Model objects. The generator is able to create code for Ext JS 4.x and Sencha Touch 2.x

Example

Provided with this class

package test;

public class User {
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String city;
    
    //get and set methods
    //....

}

the generator creates this Ext JS code

Ext.define('test.User', {
    extend: 'Ext.data.Model',
    fields: [ {
        name: 'id',
        type: 'int'
    }, {
        name: 'firstName',
        type: 'string'
    }, {
        name: 'lastName',
        type: 'string'
    }, {
        name: 'email',
        type: 'string'
    }, {
        name: 'city',
        type: 'string'
    } ]
});

The fields of the class do not have to be annotated with a special annotation. The generator tries to read all public accessible properties. If a field should not be part of the generated code annotate it with @JsonIgnore. As default the generator takes the full qualified name of the class as the name of the model object and the name of the property as the name of the field.

Datatypes are mapped according to this list if not overwritten with the @ModelField annotation (see below)

Java Ext JS/Sencha Touch
Byte int
Short int
Integer int
Long int
BigInteger int
byte int
short int
int int
long int
Float float
Double float
BigDecimal float
float float
double float
String string
Date date
java.sql.Date date
Timestamp date
org.joda.time.DateTime date
org.joda.time.LocalDate date
Boolean boolean
boolean boolean

Part of the generator are the annotations @ModelField and @Model. With these two annotations the default behaviour can be overwritten and additional informations can be specified that are written to the model object source code.

@Model

Attribute Description
value "Classname" of the model. See Ext.data.Model. If not present full qualified name of the class is used.
idProperty Name of the id property. See Ext.data.Model#idProperty. If not present default value of 'id' is used.
paging Set this to true if the read method returns an instance of ExtDirectStoreReadResult. This adds reader: { root: 'records' } to the proxy configuration
readMethod Specifies the read method. This is a ExtDirect reference in the form action.methodName. See Ext.data.proxy.Direct#api. If only the readMethod is specified generator will write property directFn instead.
createMethod Specifies the create method. This is a ExtDirect reference in the form action.methodName. See Ext.data.proxy.Direct#api.
updateMethod Specifies the update method. This is a ExtDirect reference in the form action.methodName. See Ext.data.proxy.Direct#api.
destroyMethod Specifies the destroy method. This is a ExtDirect reference in the form action.methodName. See Ext.data.proxy.Direct#api.

@ModelField

Attribute Description
value Name of the field. Property name. If not present the name of the property is used.
type Type of the field. Property type. If not specified the library uses the list above to determine the type.
defaultValue Default value. Property defaultValue'.
dateFormat Specifies format of date. Property dateFormat. For a list of all supported formats see Sencha Doc: Ext.Date. Will be ignored if the field is not a {@link ModelType#DATE} field.
useNull If true null value is used if value cannot be parsed. If false default values are used (0 for integer and float, "" for string and false for boolean). Property useNull.Only used if type of field is int, float, string or boolean.

Example

Java class

@Model(value = "MyApp.Bean", idProperty = "myVerySpecialId", 
        paging = true, readMethod = "beanService.read", 
        createMethod = "beanService.create", updateMethod = "beanService.update", 
        destroyMethod = "beanService.destroy")
public class Bean {

    @ModelField("myVerySpecialId")
    private int id;

    private String name;

    @ModelField(dateFormat = "c")
    private Date dateOfBirth;

    @JsonIgnore
    private String password;

    @ModelField(type = ModelType.STRING, useNull = true)
    private Long something;

    @ModelField(value = "active", defaultValue = "true")
    private boolean flag;

    //get and set methods
    //....
}

Sencha Touch 2.x model object

Ext.define('MyApp.Bean', {
    extend : 'Ext.data.Model',
    config : {
        idProperty : 'myVerySpecialId',
        fields : [ {
            name : 'myVerySpecialId',
            type : 'int'
        }, {
            name : 'name',
            type : 'string'
        }, {
            name : 'dateOfBirth',
            type : 'date',
            dateFormat : 'c'
        }, {
            name : 'something',
            type : 'string',
            useNull : true
        }, {
            name : 'active',
            type : 'boolean',
            defaultValue : true
        } ],
        proxy : {
            type : 'direct',
            api : {
                read : beanService.read,
                create : beanService.create,
                update : beanService.update,
                destroy : beanService.destroy
            },
            reader : {
                root : 'records'
            }
        }
    }
});

In the current version the generator does not support associations and validations. This is on the roadmap for one of the next version.