Posts mit dem Label gwt werden angezeigt. Alle Posts anzeigen
Posts mit dem Label gwt werden angezeigt. Alle Posts anzeigen

Mittwoch, Februar 28, 2007

Hilfreiche Foren - GWT Groups

Ich baue im Moment gerade ein Web Interface für eine bestehende Applikation. Dabei benutze ich das GWT von Google. Was würde man bei solchen Projekten ohne entsprechenden Foren/Groups machen?
Besonders hilfreich für GWT ist die Gruppe Google-Web-Toolkit. Ich wäre wohl immer noch am Debuggen.

Problem war: Die Client - Server Architektur stand doch konnte ich die entsprechenden Server Klassen einfach nicht aufrufen. Interfaces und so standen und das klappte auch, doch wollte ich auf andere Packages auf dem Server zugreifen, so war dann auch schon fertig.

Lösung: Das Projekt einfach nochmals mittels ProjectCreator erstellen und dann die benötigten Packages dort reinkopieren und nicht umgekehrt, wie ich das am Anfang gemacht habe. Jetzt funktioniert es einwandfrei.

Einen speziellen Dank an Jason für seine Geduld ;)

Dienstag, Februar 20, 2007

Kleine Übersicht - AJAX - AJAX Frameworks

Javascript/CSS

Viel der Dynamischen Funktionalität kann einfach über JavaScript/CSS erreicht werden. HTML Objekte haben ein „style.display“ Attribut. Dieses kann verschiedene Werte annehmen, z.B. „Block“ oder „none“.

Ajax

Ajax erlaubt eine asynchrone Datenübertragung. Dadurch können Teile einer HTML Seite nachträglich geladen, bzw. aktualisiert werden. Dies verringert den Traffic und die Serverlast und macht das Surfen angenehmer. Zudem wird kein zusätzliches Plug-in benötigt sondern lediglich JavaScript muss aktiviert sein.

2. Übersicht

3. Prototype

Prototype ist ein kleines AJAX Framework, welches aus einer knapp 2000 zeiligen Javascript Datei besteht. Es ist unter http://prototype.conio.net/ frei bezüglich und liegt momentan in der Version 1.4 vor.

Kern des Frameworks ist die Klasse Ajax.Updater und Ajax.Request. Dadurch lassen sich Ajax Anfragen sehr einfach und schnell vollziehen.


function suche(str,id){

var url = 'autocomplete.php';

var pars = 'str='+str+'&colName='+id;

var target = "table_div";

var myAjax = new Ajax.Updater(target, url, {method: 'get', parameters: pars,onComplete: showResponse});

}

url bezieht sich auf die Datei welche auf dem Server liegt, mittels par werden die Parameter übergeben, target bezieht sich auf ein HTML Container, welcher das Resultat darstellen wird.

Im Weiteren stellt Prototype einige andere praktische Funktionen zur Verfügung, z.B. $() welches document.getElementById() abkürzt usw.

So gesehen ist Prototype nicht eigentlich ein Framework sondern vielmehr eine Ansammlung von Javascript-Objekt-Erweiterungen.

Das Problem bei Prototype ist die mangelnde Anbindung an PHP.


4. HTML_AJAX – Pear Package


HTML_AJAX ist erst als Beta Version (0.5) vorhanden. Es wird jedoch bereits produktiv eingesetzt. Dies lässt erhoffen, dass die Version 1.0 sehr stabil sein wird. Es ist ein Pear Package und daher meistens schon standartmässig vorhanden. Im Vergleich zu Prototype erlaubt HTML_AJAX eine enge Anbindung an PHP.

Es können remote PHP Klassen angesprochen werden. Diese müssen in einer externen Datei eingebunden werden. Dort wird ein HTML_AJAX_Server Objekt erstellt, und es werden dann Javascript Stubs erzeugt.

Diese Klasse kann jetzt ganz einfach in der Hauptdatei angesprochen werden. Es fehlen lediglich noch ein paar Zeilen Javascript.


Beispiel:


<html>



<head>



<script type="text/javascript" src="server.php?client=all"&gt;</script&gt;



<script type="text/javascript" src="server.php?stub=all"&gt;</script&gt;



<script type="text/javascript"&gt;



var callback = {



rot13: function(result) {



document.getElementById('target2').innerHTML = result;



},



upperCase: function(result) {



document.getElementById('target2').innerHTML = result;



},



invert: function(result){



document.getElementById('target2').innerHTML = result;



}



}



var remoteExample = new example(callback); // our php5/4 compat version



function add(){



HTML_AJAX.replace("target", "output.php");



}



&lt;/script&gt;



</head>



<body>



<input type="button" onclick="add()" value="Click"/>



<div id="target"></div>



<input id="input" />



<a href="#" onclick="remoteExample.rot13(document.getElementById('input').value)">rot13 input</a>



<a href="#" onclick="remoteExample.upperCase(document.getElementById('input').value)"&gt;upperCase input&lt;/a>



<a href="#" onclick="remoteExample.invert(document.getElementById('input').value)">Invert input</a>







<div id="target2"></div>



</body>



</html>


Die Funktion add stellt einen simplen AJAX Request dar. Output.php wird angefordert und wird dann in target dargestellt.

Will man die PHP Klassen und Funktionen, welche auf dem Server liegen, dann muss man wie folgt vorgehen:

In der Variablen callback wird festgelegt, was mit dem Return Wert der einzelnen Funktionen geschehen soll. Jetzt wird nur noch die Klasse (hier exmple) instanziert. Die eigentlich PHP Methoden können jetzt mittels Javascript angesprochen werden.

Die dazugehörige Klasse auf dem „Server“ sähe wie folgt aus:
&lt;?php

//a session is required(you can also set session.auto_start=1 in php.ini)
session_start();

require_once 'HTML/AJAX/Server.php';

class example {

function rot13($input) {

return str_rot13($input);

}

function upperCase($input) {

return strToUpper($input);

}

function invert($input){

$ar = array();

$arSort = array();

for ($i = 0; $i &lt; strlen($input); $i++)

{

$ar[$i] = substr ($input, $i, 1);

}

krsort($ar);

return implode($ar);

}


}

$server = new HTML_AJAX_Server();

$server-&gt;registerClass(new example());

$server-&gt;handleRequest();


?&gt;


Gute Einführung unter: http://blog.joshuaeichorn.com/slides/Introduction-To-HTML_AJAX/
Die offizielle Seite: http://htmlajax.org/HTML_AJAX/HomePage


5. Google Web Toolkit (GWT)

Das Google Web Toolkit erlaubt es, Ajax Anwendungen mit Java zu bauen. Die Applikation kann in Java entwickelt werden. Zur Verfügung stehen die Kernklassen java.lang und java.util. Dazu hat Google noch einige „GUI“ Klassen, sogenanne Widgets beigefügt. Diese enthalten alle HTML Elemente: Knöpfe, Formulare, Tabellen, Menus usw. (Bsp: http://code.google.com/webtoolkit/documentation/examples/kitchensink/demo.html).

Wie schon gesagt, wird der Code in Java entwickelt, das heisst, es stehen die ganzen Debugging Funktionen zur Verfügung! Wenn das Projekt fertig gestellt ist, wird es in JavaScript kompiliert. Der GWT Kompilier erzeugt Cross-Browser Kompatiblen JavaScript Code (so sagen sie auf jeden Fall). Anfragen an den Server können an JavaServlets erfolgen oder aber an PHP.

6. xajax

Homepage: http://www.xajaxproject.org

Grösse des Frameworks: 181 KB.

Sehr einfaches Framework, welches praktisch ohne Javascript auskommt! Eine Einführung findet sich unter: http://wiki.xajaxproject.org/Tutorials:Learn_xajax_in_10_Minutes, welche sehr gut erklärt.

Einfacher Code sieht wie folgt aus:

&lt;?php

require_once("xajax.inc.php");

$xajax = new xajax();
$xajax->registerFunction("myFunction");

function myFunction($arg)
{
// do some stuff based on $arg like query data from a database and
// put it into a variable like $newContent
// Instantiate the xajaxResponse object
$objResponse = new xajaxResponse();

// add a command to the response to assign the innerHTML attribute of
// the element with id="SomeElementId" to whatever the new content is

$objResponse-&gt;addAssign("SomeElementId","innerHTML", $newContent);

//return the xajaxResponse object
return $objResponse;
}


$xajax-&gt;processRequests();
&lt;html>
<head>
<?php $xajax->printJavascript(); ?&gt;
</head>
<body>

<div id="SomeElementId"&gt;</div>
<form action="get">
<input type="button" value="Insert" onclick="xajax_myFunction(SomeArgument);" /&gt;

</form>
</body>
Vorteil
  • Kaum Javascript Kenntnisse nötig.
  • Sehr einfach einzubinden

Nachteile

  • Eher prozedural orientiert

  • Layout und Programmierung schwer trennbar

7. Weitere Frameworks


  • XOAD - PHP Based Ajax Framework

  • Dojo – The Javascript Toolkit

  • Sajax – Tool

  • AjaxAC - PHP Based Ajax Framework

  • CPAINT - Ajax Toolkit (Cross-Platform Asynchronous INterface Toolkit)

8. Weitere Infos

PS: Die Codeschnipsel sind eher Ansätze als dass sie den Anspruch auf vollständigkeit erheben!

Montag, Februar 05, 2007

GWT - simple RPC example

Robert Hanson hat ein sehr einfaches Tutorial bezüglich dem Nutzen von RPC mit dem GWT geschrieben. Es die die absoluten Basics, aber hat mir doch sehr geholfen. Wenn das Prinzip mal klar ist, dann lässt es sich einfach ausbauen.

http://roberthanson.blogspot.com/2006/06/trivial-gwt-example.html

Es ist halt in Englisch, aber ich denke, jeder kommt damit zurecht. Einfach nur den Source Code kopieren geht auch. Man versteht es ziemlich schnell, hier eine Mini Anleitung:

XML Datei muss angepasst werden. Servlet muss eingesetzt werden. path bezieht sich auf die Methode, welche auf dem Server aufgerufen werden will.

<module>
<inherits name='com.google.gwt.user.User'/>
<entry-point class='org.hanson.gwt.client.MyApplication'/>
<servlet path="/myService"
class="org.hanson.gwt.server.MyServiceImpl"/>
</module>

Das erste Interface, welches die Remote Methode hat
[./org/hanson/gwt/client/MyService.java]

package org.hanson.gwt.client;
import com.google.gwt.user.client.rpc.RemoteService;
public interface MyService extends RemoteService
{
public String myMethod (String s);
}

Das 2. Inteface welches ebenfalls die Methode hat. Diese sind sich sehr ähnlich
[./org/hanson/gwt/client/MyServiceAsync.java]

package org.hanson.gwt.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface MyServiceAsync
{
public void myMethod(String s, AsyncCallback callback);
}

Zum Schluss kommt noch der eigentliche Client:

[./org/hanson/gwt/client/MyApplication.java]

package org.hanson.gwt.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;

/**
* Entry point classes define onModuleLoad().
*/
public class MyApplication implements EntryPoint
{

public void onModuleLoad ()
{

// define the service you want to call
MyServiceAsync svc =
(MyServiceAsync) GWT.create(MyService.class);
ServiceDefTarget endpoint = (ServiceDefTarget) svc;
endpoint.setServiceEntryPoint("/myService");

// define a handler for what to do when the
// service returns a result
AsyncCallback callback = new AsyncCallback() {
public void onSuccess (Object result)
{
RootPanel.get().add(new HTML(result.toString()));
}

public void onFailure (Throwable ex)
{
RootPanel.get().add(new HTML(ex.toString()));
}
};

// execute the service
svc.myMethod("Do Stuff", callback);

}
}

Das wären so die wichtigesten Code Schnipsel daraus. Natürlich müssen die entsprechenden Pfade noch angepasst werden und zudem fehlt auch noch das html file, doch dies lässt sich sehr schnell erzeugen.

Bei mir hat es einwandfrei funktioniert!

Mittwoch, Januar 31, 2007

GWT - AJAX Framework von Google

Das AJAX Framework von Google bietet einen ganz anderen Ansatz, als die bisher vorgestellten Frameworks. Das GWT (Google Web Toolkit) ist ein super Schritt Richtung Web Anwendungen. Ganz einfach gesagt:

  • Java Code schreiben.
  • Mittels GWT den Javacode in entsprechenden JavaScript Code umwandeln
  • Fertig ist die Web Applikation (oder interaktive Homepage)
Ich persönlich finde das eine super Sache. Ich weiss, andere Leute werden da anderer Meinung sein. Ich begründe es wie folgt: Javascript ist super. Man kann viele gute Sache machen, doch das zu programmieren und zum Laufen zu bringen ist einfach abscheulich, da ich bis jetzt noch ein vernünftiges Tool gefunden habe. Google verspricht zudem auch, dass es Cross Browser Code sein sollte. Na, das ist ja mal noch ein Pluspunkt mehr. Wer schon mal Javascript programmier hat, weiss wovon ich spreche.

Zudem bietet das GWT auch eine Schnittstelle für AJAX an. Diese habe ich bis jetzt jedoch noch nicht getestet. Werde ich jedoch schon bald auch machen.

Google ist und bleibt eine innovative Firma. Ich bin nach wie vor begeistert. Google Mail ist eine super Anwendung, welche demonstriert, dass das Internet nicht nur statisch ist. Weitere Google Dienste sind, Google Kalender, Google Docs & Spreadsheet und natürlich auch Google Map.
Javascript und AJAX sind die Grundlage dafür.

Ob das GWT das gelbe vom Ei ist sei mal dahingestellt, ich finde es jedoch einen sehr gelungenen Start und werde es demnächst brauchen. Vielleicht wird sich da meine Meinung noch ändern, doch vorläufig bleibe ich dabei.