dojo.xhrPost

Posted by roberto in Java on July 21st, 2010 |  No Comments »

Perkenalan dojo.xhrPost:

Fungsi dojo.xhrPost() adalah fungsi dasar lain dari pengembangan AJAX. Banyak kesamaan dengan temanya GET (dojo.xhrGET), bertujuan utk menyediakan interface yang mudah digunakan dan konisten utk membuat pemanggilan yang asynchronous. dojo.xhrPost diarahkan kepada pengiriman data ke server, paling sering dengan memposting data FORM, atau semacam/beberapa content body. Pada intinya, fungsi ini mengimplementasikan pembuatan sebuah asynchronous HTTP POST request.

Keterbatasannya:

– tidak dapat mengepost data binary. (pertimbangkan dojo.io.iframe)

– keterbatasannya sama dengan dojo.xhr.GET

Penggunaan:

Fungsi dojo.xhrPost() mengambil sebuah objek untk dijadikan sebagai parameternya. Objek ini menentukan bagaimana xhrPost seharusnya beroperasi. Semua parameter dojo.xhrGet adalah valid, termasuk bagaimana menset load and errors handlers. Jadi untuk informasi yang lebih detil silahkan mengarah ke dojo.xhrGet.

Contoh source code:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>

<html dir=”ltr”>

<head>

<link rel=”stylesheet” type=”text/css” href=”http://ajax.googleapis.com/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css”

/>

<style type=”text/css”>

body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }

</style>

</head>

<body class=” claro “>

<b>

Simple Form:

</b>

<br>

<blockquote>

<form action=”postIt” id=”myform”>

Text:

<input type=”text” dojoType=”dijit.form.TextBox” name=”formInput” value=”Some text”>

</input>

<br>

<br>

Checkbox:

<input type=”checkbox” dojoType=”dijit.form.CheckBox” name=”checkboxInput”>

</input>

<br>

<br>

<button type=”submit” dojoType=”dijit.form.Button” id=”submitButton”>

Send it!

</button>

</form>

</blockquote>

<br>

<b>

Result

</b>

<div id=”response”>

</div>

</body>

<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js”

djConfig=”parseOnLoad: true”>

</script>

<script type=”text/javascript”>

dojo.require(“dijit.form.Button”);

dojo.require(“dijit.form.TextBox”);

dojo.require(“dijit.form.CheckBox”);

function sendForm() {

var button = dijit.byId(“submitButton”);

dojo.connect(button, “onClick”, function(event) {

//Stop the submit event since we want to control form submission.

event.preventDefault();

event.stopPropagation();

//The parameters to pass to xhrPost, the form, how to handle it, and the callbacks.

//Note that there isn’t a url passed. xhrPost will extract the url to call from the form’s

//’action’ attribute. You could also leave off the action attribute and set the url of the xhrPost object

//either should work.

var xhrArgs = {

form: dojo.byId(“myform”),

handleAs: “text”,

load: function(data) {

dojo.byId(“response”).innerHTML = “Form posted.”;

},

error: function(error) {

//We’ll 404 in the demo, but that’s okay. We don’t have a ‘postIt’ service on the

//docs server.

dojo.byId(“response”).innerHTML = “Form posted.”;

}

}

//Call the asynchronous xhrPost

dojo.byId(“response”).innerHTML = “Form being sent…”

var deferred = dojo.xhrPost(xhrArgs);

});

}

dojo.addOnLoad(sendForm);

</script>

</html>

Hasilnya :

../postIt?formInput=Ini++adalah+test…&checkboxInput=on

Resize image in j2me

Posted by roberto in Java on July 16th, 2010 |  1 Comment »

public static final Image scale(Image image, int newWidth, int newHeight) {
int[] originalData = new int[image.getWidth() * image.getHeight()];
image.getRGB(originalData, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
int[] currentData = new int[newWidth * newHeight];
int YD = image.getWidth() * ((image.getHeight() / newHeight) – 1);
int YR = image.getHeight() % newHeight;
int XD = image.getWidth() / newWidth;
int XR = image.getWidth() % newWidth;
int outOffset = 0;
int inOffset = 0;
for (int y = newHeight, YE = 0; y > 0; y–) {
for (int x = newWidth, XE = 0; x > 0; x–) {
currentData[outOffset++] = originalData[inOffset];
inOffset += XD;
XE += XR;
if (XE >= newWidth) {
XE -= newWidth;
inOffset++;
}
}
inOffset += YD;
YE += YR;
if (YE >= newHeight) {
YE -= newHeight;
inOffset += image.getWidth();
}
}
return Image.createRGBImage(currentData, newWidth, newHeight, true);
}

Grails (2)

Posted by roberto in Grails on July 15th, 2010 |  No Comments »

Setelah kita membuat sebuah proyek denga create-app, maka selanjutnya maka kita akan membuat klas domain dengan create-domain-class. Klas Doamain (Domain class) merupakan inti dari semua aplikasi bisnis.
caranya:

c:\java-apps\racetrack>grails create-domain class

Setelah itu ketikkan Race, maka akan muncul :


create-domain-class:
[input] Enter domain class name:
Race

[echo] Domain class created: grails-app/domain/Race.groovy

[echo] Created test suite: grails-tests/RaceTests.groovy
BUILD SUCCESSFUL
Total time: 5 seconds

Dalam hal ini Grails tidak hanya membuat Domain class tetapi juga Unit class.

Setelah itu lakukan hal yang sama dengan memciptakan domain class utk Registration.

Setelah domain class Race dan Registration dibuat maka kita akan mencoba menkofigurasi isi dari setiap domain class.
Utk doamin class Race bisa dibuka pada c:/java-apps/racetrack/grails-app/domain/Race.groovy. Kita akan melihati isi awal dr file Race.groovy tersebut hanya terdiri dari:

class Race {

static constraints = {
}
}

maka kita akan menambahkan kode seperti di bawah ini:

class Race {
String name
Date startDateTime
String city
String state
Float distance
Float cost
Integer maxRunners = 100000

static hasMany = [registrations:Registration]

static constraints = {
}
}

dan utk domain class Registration (c:/java-apps/racetrack/grails-app/domain/Registration.groovy) kita tambahkan:

class Registration {
Race race
String name
Date dateOfBirth
String gender = ‘F’
String postalAddress
String emailAddress
Date createdAt = new Date()
static belongsTo = Race
static optionals = [“postalAddress” ]
}

utk pengertian masing2 kode yang kita tambahkan akan kita jelaskan sbb:

-> dalam claas Race memiliki nama, strat date/time dan lain sebagainya. Secara default setiap Race akan terdiri dari maksimum 100.000 pelari. Cukup dan familiar bukan dengan yang lain? Tapi, bagaimana dengan hasMany?

Kita tau dari sebuah sudut bisnis bahwa races dan registrations memiliki sebuah one-to-many relationship. Model domain Race memasukkan properti hasMany utk mensupport hubungan(relationship) tersebut. Properti hasMany menyatakan kepada Grails bahwa sebuat Race memiliki sebuah one-to-many relationship dengan beberapa class. Utk mengidentifikasikan class yang terlibat dalan hubungan/relationship tersebut, kita menunjuk sebuat map dari properti nama-class nama berpasangan dalam hasMany. Dalam kasus ini, kita mendeklerasikan properti registrations akan memegang sebuah collection dari objek Registration.

User telah mengatakan kepada kita bahwa atribut dari race adalah wajib begitu juga dengan sebagian besar dari atribut dari registration. Tetapi user melihat sepertinya internet akan dimengerti sehingga mereka memutuskan cukup hanya akan dengan e-mail address dan postal address seharusnya menjadi properti yang optional. Secara default, Grails mengasumsikan bahwa sebuah field adalan bener2 wajib. Jika secara khusus field tersebut tidak wajib lg makan kita harus mendeklarasikannya dengan cara mendefinisikan properti optionals.
Contohnya:
static optionals = [“postalAddress”, “gender”]

Dalam Domain class Race, kita mendeklerasikan bahwa objek Race akan menyimpan 0 atau lebih dari objek Registration. Kita tahu pasti bahwa kita tak akan bisa meregister utk sesuatu jika tidak ada. jadi kita haru mengatakan kepada Grails bahwa registration bergantung pada sebuah race. Sejak kita tahu bahwa semua field adalah wajib secar default, kita akan melihat bahwa kita tidak akan bisa menyimpan sebuah objek Registration, kalau tidak hal itu akan menghasilkan sebuah nilai non-null utk properti race. Untuk itu properti belongsTo mengidentifikasikan sisi dari pemilik dari one-to-many relationship antara races dan registrations. Dengan dideklarasikannya sebuah registration belongs to sebuah race maka Grails menjamin bahwa dengan penghapusan sebuah registration tidak akan menghapus yang berhubungan dengan race, tetapi penghapusan sebuah race akan secra nyata mengahapus semua yang berhubungan dengan registrations.