ZK vs. GWT : Server-Centric Matters!

Jeff Liu, Engineer, Potix Corporation
February 18, 2008
Update : March 18, 2009.

Contents

  1. Abstract
  2. Server-Centric and Client-Centric
  3. ZK vs. GWT in Action : Google Maps Locator
  4. ZK vs. GWT in Action 2 : Data-binding
  5. ZK vs. GWT in Action 3 : Live data
  6. ZK Anywhere
  7. Conclusion

1. Abstract

On Feb 18th, 2005 Jesse James Garrett first introduced the term “AJAX” in his essay “Ajax: A New Approach to Web Applications.” Since then, Ajax has become a very popular topic in web application development communities. In the past 2 years, numerous Ajax frameworks have been built for the development community. These frameworks vary from pure JavaScript frameworks, such as Yahoo! UI (YUI), to Flash based ones such as Adobe’s AIR (Adobe Integrated Runtime). But, one important concept is often ignored by the media and general audience: are the frameworks server-centric or client-centric? This article attempts to clarify some misconception with real ZK and GWT examples.

2. Server-Centric and Client-Centric

Where Applications Run:

In short, the main difference between server-centric and client-centric is where the application runs. In a server-centric framework, the application is hosted on the application server and all processing is done on the server. The client browser is only used for data presentation.

In contrast, applications that do all of their processing on the client side, such as GWT, use JavaScript running in the client browser.


 

Figure 1 - Server-Centric vs. Client-Centric

 

Server and Client Centric Ajax Frameworks in Practice:  ZK and GWT

ZK and GWT bring a similar mantra to Java developers - developing Ajax applications using Java rather than JavaScript. To developers who rely on Java as their tool of choice, both frameworks offer a great escape from the JavaScript nightmare.

At the first glance, developers will consider that these 2 frameworks are similar: both allow the developer to use Java, and they both, support AJAX user interface components. Probe a little more deeply into the mechanism behind both frameworks and you will see that ZK and GWT work in an entirely different fashion. Generally GWT compiles Java code into JavaScript allowing the application to run in the client’s browser rather than on the server's. Applications built of GWT interact with the server only when data retrieval is necessary. ZK framework uses a different approach from GWT: the application runs on the server and ZK takes care of the presentation layer.

“The advantages of server-centric Ajax frameworks: state and control logic stay on the server,
so security compromises that exploit client-side state and logic are more difficult to pull off.
The developers can work in one language (on the server) and, for the most part,
ignore the fact they are writing a web application.”

- by Dietrich Kappe, Chief Technology Officer of Pathfinder


To Know more how ZK works as a server-centric framework, refer to the following:

3. ZK vs. GWT in Action : Google Maps Locator

In the following section a simple Google Maps Locator application will be implemented by ZK and GWT in order to demonstrate the difference between the frameworks.  Assuming that you are coding a Google Maps Locator for a client, the  requirements might contain:

  1. An UI with a text input field, a button and a Google map.
  2. When user clicks the button the text in the textbox will be used as a keyword to find the latitude, longitude and description for that location.
  3. Displaying the location on the Google Map and display the description as an Info Window.

Figure.2 - Google Maps Locator

Let us assume you have already implemented a magical Java class which is called “Locator.” It will take a string as input and return the required information.  The only work left is implementing the UI and data retrieval parts.  Let’s see code from both frameworks in real action.

ZK (1 File, 24 Lines of Code)

Gmap.zul:

<zk>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=KEY" type="text/javascript" >
    </script>
    <window>
        <div align="center">
            <vbox width="600px">
                <textbox id="tb" width="550px"  />
                <button onClick="locate();" label="Search" />
                <gmaps id="mymap" zoom="16" height="300px" />
            </vbox>
        </div>
        <zscript>
        import org.zkoss.test.Locator;
        import org.zkoss.gmaps.Ginfo;              
        public void locate(){            
            double[] pos = Locator.locate(tb.getValue());
            mymap.panTo(pos[0], pos[1]);
            Ginfo myginfo = new Ginfo(tb.getValue(), pos[0], pos[1]);
            myginfo.setParent(mymap);
            mymap.openInfo(myginfo); 
        }
        </zscript>
    </window>
</zk>

ZK - Using Macro Component (only 5 Lines of Code)

<?component name="gmapLocator" macroURI="gmapLocator.zul"?>
<zk>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=KEY" type="text/javascript" >
    </script>
    <gmapLocator />
</zk>

The Macro component : A quick way to make your code reusable, see gmapLocator.zul.

GWT (5 Files, 190 Lines of Code)

Client Side Files:

  1. Map.java – The main application class
  2. LocationGenerator.java – The interface for RPC.
  3. LocationGeneratorAsync.java- The interface for RPC.
  4. LocatorData.java – The data wrapper class for passing data from server.

Server Side Files:

  1. LocationGeneratorImpl.java – The data provider class in server side.

Code Snippet:

Map.java:

    
...
public class Map implements EntryPoint {
    ...     
    public void onModuleLoad() {
        ...
        mapWidget = new GMap2Widget("400", "600");
        gmaps = mapWidget.getGmap();
        gmaps.addControl(GControl.GMapTypeControl());
        gmaps.addControl(GControl.GLargeMapControl());
        gmaps.setZoom(16);
        VerticalPanel vPanel = new VerticalPanel();
        HorizontalPanel hPanel = new HorizontalPanel();
        hPanel.add(location);
        hPanel.add(search);
        vPanel.add(title);
        vPanel.add(hPanel);
        vPanel.add(mapWidget);   
        RootPanel.get().add(vPanel);
    }
 
    public class ClickListenerImpl implements ClickListener{
        public void onClick(Widget widget) {
            LocationGeneratorAsync async = 
                LocationGenerator.Util.getInstance();
            async.locate(location.getText(), new LocationCallback());
        }
    }
 
    public class LocationCallback implements AsyncCallback {
        public void onFailure(Throwable error) {
            response.setText("Ops..!");
        }
 
        public void onSuccess(Object resp) {
            LocatorData data = (LocatorData)resp;
            double lat = data.getLat();
            double lng= data.getLng();
            String inf = data.getInfo();
            Label info = new Label(inf);
            info.setStyleName("map-info");
            GLatLng pos = new GLatLng(lat,lng);
            gmaps.setCenter(pos);
            gmaps.openInfoWindow(pos,info);
        }
    }
}

    

LocationGenerator.java:

    
public interface LocationGenerator extends RemoteService {
    public static final String SERVICE_URI = "/locationgenerator";
    public static class Util {
        public static LocationGeneratorAsync getInstance() {
            LocationGeneratorAsync instance =  
                (LocationGeneratorAsync)GWT.create(LocationGenerator.class);
            ServiceDefTarget target = (ServiceDefTarget) instance;
            target.setServiceEntryPoint(GWT.getModuleBaseURL()SERVICE_URI);
            return instance;
        }
    }
    public LocatorData locate(String location);
}
    

LocationGeneratorAsync.java:

    
public interface LocationGeneratorAsync {
    public void locate(String location, AsyncCallback callback);
}
    

LocatorData.java:

    
public class LocatorData implements IsSerializable {
    private double _lng;
    private double _lat;
    private String _info;
    private String _title;
      
    public LocatorData(double lat, double lng, String info,…) {
         _lng = lng;
         _lat = lat;
         _info = info;
         _title = title;
    }
    ...
}
    

LocationGeneraotrImpl.java:

    
public class LocationGeneratorImpl extends RemoteServiceServlet implements LocationGenerator {
    public LocatorData locate(String location) {
        com.macroselfian.gps.Locator locator = 
        new com.macroselfian.gps.Locator(location);
        LocatorData data = new 
        LocatorData(locator.getLat(),locator.getLng(),locator.getInfo(), 
        locator.getTitle());
        return data;
    }
}

    

Using the ZK framework, the component’s state is maintained by the server. One of the advantages of server-centric applications is that data retrieval and business logic processing are straight-forward. Since the component states are maintained on the server side, retrieving data or processing business logic requests require no extra work.

In contrast, a GWT-RPC call is required when GWT applications needs data from the server. In Map.java, async.locate(…) is called when onClick is trigged, then a callback object, LocationCallback is required to process the returned data. If you have any JavaScript programming experience, you will soon find out that it is very similar to calling XMLHttpRequest functions in JavaScript. Up to this point you have probably figured out that by using ZK’s server-centric approach, developers don’t have to make an RPC call and handle the returned data manually.

DWR (1 Files, 53 Lines of Code)

Here is a sample code for achieve the same functionality by another client-centric framework, DWR.

Map.htm

    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript" src="dwr/engine.js"></script>
    <script type="text/javascript" src="dwr/util.js"></script>
    <script type='text/javascript' src='dwr/interface/locator.js'> </script>
    <script src="http://maps.google.com/maps?file=api&amp;v=2" type="text/javascript"></script>
    <script type="text/javascript" src="http://www.google.com/jsapi?key=ABCDEFG"></script>
</head>
<body>
<script language="javascript" >
 
    var lng, lat, map;
 
    function goto(location){
        locator.locate(location, callBackLat);
    }
      
    function callBackLat(data){
        lat = data[0];
        lng = data[1];
        load();
    }
       
    function load(){
        if (GBrowserIsCompatible()) {
            var level = 16;
            map = new GMap2(document.getElementById("map_canvas"));
            map.setCenter(new GLatLng(lat, lng), level);
            map.addControl(new GSmallMapControl());
            map.addControl(new GMapTypeControl());
            var point = new GLatLng(lat,lng);
            setGmarker();
            setGinfo();
        }
    }
      
    function setGmarker(){
        var point = new GLatLng(lat,lng);
        map.addOverlay(new GMarker(point));
    }
      
    function setGinfo(){
        locator.getInfo(location, callBackGinfo);
    }
      
    function callBackGinfo(data){
        var point = new GLatLng(lat,lng);
        span_element = document.createElement("span");
        span_element.setAttribute("style","font-size:11px;font-family:verdana;");
        txt_node = document.createTextNode(data);
        span_element.appendChild(txt_node);
        map.openInfoWindow(point,span_element);
    }
 
</script>
<input id="location" type="textbox" onchange="goto(this.value);" />
<div id="map_canvas" style="width: 500px; height: 300px"></div>
</body>
</html>

    

Both GWT and DWR use the client-centric approach, but DWR is quite different from GWT. Compared to GWT, DWR requires less codes. However, as a result of its flexibility, developers have to handle the browser dependency issues. In short, DWR only builds the “bridge” between the client and the server.

4. ZK vs. GWT in Action 2 : Data-binding

Every developer will encounter this in his/her career, displaying master and detail problem. For example, there is list of names when the user clicks on one of names; the details behind the name need to be displayed in the details panel. ZK comes with a very neat solution for this task: annotation data-binding. For more information about ZK annotation data-binding, please refer to Y-Grid Support Drag-Drop and DataBinding.

To achieve this task in GWT, developers need to make an RPC call, find which cell in the grid which needs updating and so on. It is not a bad idea, but you have to do all that work by yourself.

ZK (1 File, 39 Lines of Code)

ygrid-databinding2.zul

    
<?init class="org.zkforge.yuiext.zkplus.databind.AnnotateDataBinderInit" ?> 
<window xmlns:y="http://www.zkoss.org/2007/yui" width="500px">
    <zscript src="Person.zs"/>
    <y:grid height="200px" model="@{persons}" selectedItem="@{selected}">
        <y:columns>
            <y:column label="First Name"/>
            <y:column label="Last Name"/>
            <y:column label="Full Name"/>
        </y:columns>
        <y:rows>
            <y:row self="@{each=person}">
                <y:label value="@{person.firstName}"/>
                <y:label value="@{person.lastName}"/>
                <y:label value="@{person.fullName}"/>
            </y:row>
        </y:rows>
    </y:grid>
    <!-- show the detail of the selected person -->   
    <textbox value="@{selected.firstName}"/>
    <textbox  value="@{selected.lastName}"/>
    <label  value="@{selected.fullName}"/>
    <zscript>
        //init each person
        setupPerson(Person person, int j) {
            person.setFirstName("First "+j);
            person.setLastName("Last "+j);
        }  
        //prepare the example persons List
        int count = 30;
        List persons = new ArrayList();
        for(int j= 0; j &lt; count; ++j) {
            Person personx = new Person();
            if(j==0)
                selected = personx;
            setupPerson(personx, j);
            persons.add(personx);
        }  
    </zscript>
</window>

    

GWT (4 Files, 200 Lines of code)

Client Side Code:

  1. FooExt.java – The main application class
  2. DataSourceGenerator.java – The interface for RPC.
  3. DataSourceGeneratorAsync.java- The interface for RPC.

Server Side Code:

  1. DataSourceGeneratorImpl.java – The actual data provider class in server side.

Code Snippet:

FooExt.java:

    
package test.gwtExt.client;
import com.google.gwt.core.client.EntryPoint;
...
public class FooExt implements EntryPoint {
    
    ...
    
    public void onModuleLoad() {
        _response = new Label();
        _first = new TextBox();
        _first.setName("first");
        _first.addChangeListener(new OnTextChangeListenerImpl());
        _last = new TextBox();
        _last.setName("last");
        _last.addChangeListener(new OnTextChangeListenerImpl());
        DataSourceGeneratorAsync async = 
            DataSourceGenerator.Util.getInstance();
        async.getData(new DataCallback());
        RootPanel.get().add(_first);
        RootPanel.get().add(_last);
        RootPanel.get().add(_response);
    }
    
    public class DataCallback implements AsyncCallback {
 
        public void onFailure(Throwable error) {
            ...      
        }
 
        public void onSuccess(Object resp) {
            Object[][] data = (Object[][])resp;
            createGrid(data);
        }
    }
    
    public void createGrid(Object[][] data){
          
        MemoryProxy proxy = new MemoryProxy(data);
        _recordDef =  new RecordDef(
            new FieldDef[]{
                new StringFieldDef("first"),
                new StringFieldDef("last"),
                new StringFieldDef("full")
            }
        );
         
        ArrayReader reader = new ArrayReader(_recordDef);  
 
        Store store = new Store(proxy, reader);
        store.load();
        ColumnModel columnModel = new ColumnModel(new ColumnConfig[]{
            new ColumnConfig() {
                {
                    setHeader("First Name");
                    setWidth(160);
                    setSortable(true);
                    setLocked(false);
                    setDataIndex("first");
                }
            },
            new ColumnConfig() {
                {
                    setHeader("Last Name");
                    setWidth(100);
                    setSortable(true);
                    setDataIndex("last");
                }
            },
            new ColumnConfig(){
                {
                    setHeader("Full Name");
                    setWidth(260);
                    setRenderer(new Renderer(){
                        public String render(...) {
                            ...
                        }
                    });
                }
            }
        });
 
        _grid = new Grid("grid-example1", "460px", "300px", store, ...);
        _grid.addGridRowListener(new RowClickListener());
        _grid.render();
 
    }
    
    public class RowClickListener implements GridRowListener{
 
        public void onRowClick(Grid grid, int rowIndex, EventObject e) {
            FieldDef[] fs = _recordDef.getFields();
            Record record = grid.getStore().getAt(rowIndex);
            _first.setText(record.getAsString(fs[0].getName()));
            _last.setText(record.getAsString(fs[1].getName()));
            _selectedRow = rowIndex;
        }
 
        ...
       
    }
    
    public class OnTextChangeListenerImpl implements ChangeListener {
        public void onChange(Widget widget) {
            /* TODO: Modify data in server side by RPC */
            TextBox target = (TextBox)widget;
            Record r = _grid.getStore().getAt(_selectedRow);
            if(target.getName().equals("first")){
                r.set("first", target.getText());
            }else if(target.getName().equals("last")){
                r.set("last",target.getText());
            }
        }
    }
}

    

DataSourceGenerator.java:

    
public interface DataSourceGenerator extends RemoteService {
    public static final String SERVICE_URI = "/datasourcegenerator";
    public static class Util {
        public static DataSourceGeneratorAsync getInstance() {
            DataSourceGeneratorAsync instance = 
                (DataSourceGeneratorAsync)GWT.create(DataSourceGenerator.class);
            ServiceDefTarget target = (ServiceDefTarget) instance;
            target.setServiceEntryPoint(GWT.getModuleBaseURL() + SERVICE_URI);
            return instance;
        }
    }
    public String[][] getData();  
}

    

DataSourceGeneratorAsync.java:

    
public interface DataSourceGeneratorAsync {
    public void getData(AsyncCallback callback);
}

    

DataSourceGeneratorImpl.java:

    
public class DataSourceGeneratorImpl extends RemoteServiceServlet implements DataSourceGenerator {
    public String[][] getData() {
        org.zkoss.demo.DataSource ds = new org.zkoss.demo.DataSource();
        return ds.getData();
    }
}
    

 

5. ZK vs. GWT in Action 3 : Live data

One of the most frustrating problems for web application developers is displaying large amounts of data without the latency of data loading. ZK comes out with a very neat solution to this problem, live data (load-on-demand). For more information about ZK live data, refer to How to realize the idea of live data in a Grid.

ZK (1 File, 15 Lines of Code)

Ygrid-livedata.zul:

    
<window xmlns:y="http://www.zkoss.org/2007/yui" title="Y-Grid Live Data"  width="200px"  border="normal">
    <zscript><![CDATA[
        String[] data = new String[200];
        for(int j=0; j < data.length; ++j) {
            data[j] = "option "+j;
        } 
        ListModel strset = new SimpleListModel(data);
    ]]></zscript>
    <y:grid height="200px" model="${strset}">
        <y:columns>
            <y:column label="options"/>
        </y:columns>
    </y:grid>
</window>
    

GWT (? Files, ? Lines of Code)

The concept is like this: add a listener for the grid’s bodyscroll event then, when the body is scrolled, get the “proper” data from server by GWT-RPC. After that parse the data and add the data into the grid’s model and then finally, call the grid’s render method. If you know a better way to accomplish this task, please contact me.

6. ZK Anywhere

What about the devices without browsers?

Due to the iPhone phenomenon, some Ajax solutions support smart phones with browsers. But, what about 1.8 billion Java phones which do not come with such resources (computing power, memory, browser, etc.) that iPhone provides? The server-centric/thin-client approach by ZK brings benefits to those resource constrained devices. Your client devices will not be limited to robust ones with browser. With ZK, you can run your Web applications anywhere.

ZK on Java Phones

Figure 3 - ZK on Java Phone

More articles about ZK Mobile

ZK on Google Adroid

Figure 4 - ZK on Android

More aritcles about ZK Android

7. Conclusion

Right Tool for the Right Job

In the process of collecting information for this article, I found out that there are thousands of articles comparing Ajax frameworks. Many of them are trying to convince the reader that one framework is a “better” choice than others, thus treating the Ajax framework market as a Zero-Sum Game. I personally see it from a different point of view. After having seen both the server-centric and client-centric frameworks, making a comparison for them is like comparing apples to oranges. Both frameworks come with the initiative of developing Ajax applications with less efforts, but they take an entirely different approach to it.

To me, both of them are great tools to use. The real question is what kind of problem are you trying to solve?

Find the right tool for the right job. For heavy data access applications and projects that require a higher level of security, I prefer the server-centric approach. If the application requires fancy client side actions and less server requests, the client-centric approach could be my choice.

Comments
 
robertpic (88.117.222.10)
Feb 21, 2008

Good article. Maybe you should announce this in the news.

I will host the examples from the "Struts, JSF vs. ZK article" from the german Javamagazin. I do some improvements (i.e. databinding) for the ZK resolution.

The ZK resolution needs 40% less code than the JSF and 50% less code than the Struts example.

The example includes the description for the databindingconverters (i.e. boolean to image).
I get out of track and spend my time with JDBC-Binding (via converter) which works also nice....

I hope i am ready this week.

/Robert

Jim Yeh (122.116.20.172)
Feb 22, 2008

Robert,

Looking forward to your article!

Let us know when it's ready.

/Jim

Christophe Hanon (217.136.227.24)
Feb 22, 2008

Interesting article, but obviously the author is pro ZK.

GWT makes good job to develop Ajax Client Browser app shielded from Javascript and difference between (the supported) browser. Clearly GWT miss an application framework for databound application. That may come though. May be somebody has already done one? My major concern about GWT is this translation technology (Java -> Javascript), in theory it is nice, but in case of bugs in the framework that may hurt.

ZK shields the developer much more but on the other side, ZK server centric approach makes it a poor candidate for largely distributed apps. Handling component event at the server level introduce major slowness.

Also I don't see a word about the licensing, here ZK is a major trouble with the different versions and undeclared pricing for Enterprise version. I thinl a good framework should be LGPL. Commerical offering should go for training, certification, support,GUI builder etc

It would be great to have more comparison articles between all these frameworks (wicket, click, jsf etc).

So lets continue searching the perfect framework...

Christophe

Jebberwocky (122.116.20.172)
Feb 22, 2008

To Christophen Hanon

When the application developers by GWT, the "Web Service Approach" is often used. Since that GWT doesn't keep any objects(data or class) in server side, it will highly depended on the We Service to get its relevant data. For example, when you try to find a id from a person, you might get data from Web Service. And, the web service might go through every process which is needed. It sometimes results in hefty server loading too.

The "design" is the key point here. The design of your application and web service matters!

Marcos de Sousa (196.22.51.195)
Feb 22, 2008

Good article.

Why not publish it on www.theserverside.com and www.infoq.com ?

Marcos de Sousa

Zing (63.87.6.102)
Feb 22, 2008

This is an awesome article. ZK is probably the best AJAX framework out there - and it is certainly better than any of the non-AJAX frameworks such as JSF and Struts. Unfortunately, ZK does not get the same amount of press coverage as GWT. GWT is good, but it is NOT suitable for large applications. GWT is suitable for small applications with large (millions) of users. Also, GWT requires the developer to write a lot more code, and be aware of a lot more Javascript type concepts. ZK is definitely the most practical framework for large business applications with small to medium (less than 100,000) number of users. ZK takes the easiest concepts of web and desktop Java application development, and combines them into an awesome web framework.

Ricardo M. Augusto (189.33.179.95)
Feb 23, 2008

Hi,

I have implemented this "magical" Java class which is called "Locator" with a GMapsLocator project.
GMapsLocator uses GClientGeocoder to translate an address in coordinate, or
in many coordinates, it depends how precision was your address.

Get Latitude and Longitude and more from address and use with GMaps.

See a demo and download !
http://www.ecafe.com.br/locator/


GMapsLocator is open source and free for any use.
Problems or suggestions, please contact me.
ricardo@ecafe.com.br


Ricardo M. Augusto

Jeff Liu (203.73.105.76)
Feb 24, 2008

Ricardo. Great work !

Sean (67.170.199.228)
Mar 02, 2008

Isn't it better to provide an example that template does not have code?
For a trivial example, it looks fine, but it reminds me of JSP with <% code %>.
Is there any visual debugger that can trace the ZK script code in the page template?

Jeff Liu (122.116.20.172)
Mar 03, 2008

By MVC approach

gmap2.zul

<?xml version="1.0" encoding="utf-8"?>
<zk>
	<script
		src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA_a5cKDw802_dX3vWdInYqhTIlznav5OIV7y4zT7agJRovS0PzhQ0UBGBbe2oqlCTDbp4fH0LER3l3g"
		type="text/javascript">
	</script>
<window apply="com.macroselfian.gps.MapComposer" >
		<vbox >
			<label value="Macroselfian Google Map Locator"/>
			<hbox width="610px">
				<textbox width="550px" id="tb"/>
				<button width="60px" forward="onLocate" label="Search"/>
			</hbox>
			<gmaps id="mymap" zoom="16" showTypeCtrl="true" showLargeCtrl="true" width="610px" height="400px">
				<ginfo id="ginfo"/>
			</gmaps>
		</vbox>
</window>
</zk>

MapComposer.java

package com.macroselfian.gps;

import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericComposer;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import org.zkoss.gmaps.Gmaps;
import org.zkoss.gmaps.Ginfo;


public class MapComposer extends GenericComposer {

	public void onLocate(Event evt){
		Window win = (Window)evt.getTarget();
		Textbox tb = (Textbox)win.getFellow("tb");
		Gmaps mymap = (Gmaps) win.getFellow("mymap");
		Ginfo ginfo = (Ginfo) win.getFellow("ginfo");
		String location = tb.getValue();
		Locator locator = new Locator(location);
		mymap.panTo(locator.getLat(), locator.getLng());
		mymap.setZoom(16); 
		ginfo.setOpen(true);
		ginfo.setLat(locator.getLat());
		ginfo.setLng(locator.getLng());
		ginfo.setContent(locator.getInfo());
		mymap.openInfo(ginfo); 
		
	}
}

Refer to http://www.zkoss.org/smalltalks/mvc/

Jeff Liu (122.116.20.172)
Mar 07, 2008

One of the things that ZK does that's different from all the other Web2.0 frameworks (Prototype, jQuery, YUI, etc) is that it puts the behavior code (control and model) back on the server: "In response to these challenges, ZK delivers the intuitive desktop programming model to Web applications with event-driven, component-based, and server-centric architecture" "It is aimed to bring the desktop programming model to Web applications." ~ Bill McDonald from ZK Forum

Prabakar (203.199.202.97)
Mar 26, 2008

I have 2 observations:
1) Though ZK uses XUL (or ZUML), it looks very much similar to the technique where people extend HTML tags (ex: Backbase). Can some one explain how ZK is different?
2) One of key issues with server centric approach is "debugging". Since the HTML page is generated on the fly, if any bugs are reported, it will be difficult to debug - especially when the developers code using only 'Java' & they may not know how their java code will be translated into HTML at runtime.

Jeff (122.116.20.172)
Apr 10, 2008

From ZK developer guide:

The ZK User Interface Markup Language (ZUML) is a XML-based language used by developers to describe the visual presentation. ZUML is aimed to separate the dependency of the set of components to use. In other words, different set of components[28], such as XUL and XHTML, could be used simultaneously in the same ZUML page. Different markup languages could be added transparently. If two or more set of components are used in the same page, developers have to use the XML namespaces to distinguish them. Refer to the Component Sets and XML Namespaces section in the ZK User Interface Markup Language chapter if you want to mix multiple component sets, say XUL and XHTML, in the same page.

Jeff (122.116.20.172)
Apr 10, 2008

I think that one of the ZK framework's goals is to prevent Java users from the HTML & JavaScript. In most of cases, ZK frameworks will take all the client side action, javascript events, HTML DOM-tree manipulation and etc. Developers should only worry about the Java doe. But, in some rare cases, accidents happen. In this situaion, there are some tools like Firebug, developer toolkit and so on for the debugging.

shinyr (124.229.137.37)
Apr 11, 2008

So,what's the difference between ZK and openlaszlo?

jeff (122.116.20.172)
Apr 14, 2008

First of all, there is a huge difference in client engines. ZK uses standard HTML, JavaScript , CSS and ... OpenLaszlo uses Flash.

Norio (122.116.20.172)
Apr 15, 2008

OpenLaszlo is good for animation (Flash) and more for art designers, but lack of integration with back end (programming in Java, data access, other Java frameworks).
In contrast, programming in Java and server-side integration are ZK's strengths.

Simon (86.142.30.180)
May 30, 2008

Christophen Hanon said:

> ZK server centric approach makes it a poor candidate for largely distributed apps.

However flipping that around one is saying "we can farm off the custom processing to the javascript engine in the clients browser". Even within a large company you cannot control exactly what browser versions and security settings the users are using. The browser javascript runtime of your users is simply out_of_our_control. In our tests our server side ZK events typically get processed in 10ms. As it is that fast on the server there really is nothing to be gained by trying to push custom javascript code out to the clients browser. By using ZK only well tested and widely used opensource library code is being sent to the browser which is the least risk for our rich webapp application.

Jorge (200.123.189.161)
May 30, 2008

I totally agree with this article, because I've tested both frameworks from scratch, GWT seemed quite more complex, particularly focusing the development of complex data access applications. On the other hand, GWT is much faster because of it's architecture, loads faster, renders faster, gave me a better user experience, specially running through a slow network connection. Zk has a richer set of components (GWT uses only DOM level 1) that really simplify developers labor. Keep in mind that we are in Google's era, this could be an important thing to take into account. I don't have metrics on server/client side resources usage, I'll appreciate if someone could send his/her conclusions on this matter.

Jeff liu (220.133.44.37)
Jun 05, 2008

Dear Jorge

Could you provide us the data from your testing result?
contact me at jeffliu@zkoss.org

HIBERNATOR (72.192.56.45)
Jun 09, 2008

GWT offers some nice UI widgets (from GWT-Ext especially), but GWT is definitely not ready for data driven applications. Search for "GWT hibernate CRUD demo" on your favorite search engine, and let me know how many links you find where you can download a working example!

Jeff (220.133.44.37)
Jun 10, 2008

To see how easy ZK works with Spring and Hibernate
http://www.zkoss.org/smalltalks/hibernatezk/hibernatezk.dsp
and
http://www.zkoss.org/smalltalks/hibnsprn/hibn_sprn_zk.html
Also, the outcoming zk forum is based on ZK+Spring+Hibernate

Stacey (196.32.36.154)
Jul 12, 2008

Great work, enjoyed reading this..

Ted (24.87.165.223)
Jul 27, 2008

This is the first time I read something about ZK.

I have several questions regarding ZK:

1. Server Centric

- Would this make the server work more because it has to process HTML/CSS/JS/DOM on the server?

- Would this mean that the data being sent is bigger? (Sending HTML/CSS/JS from time to time)

2. Caching

- If everything is generated in the server, would this mean caching (client-side) is not an option?

- Even if you can cache, you'd have to cache pretty much all paths the user would likely to interact with, and assume that server side never gets updated, otherwise, you'll have to do versioning no?

3. Lines of Code

- I always skip the part of an article that tries to "show-off" that "hey... I can write that with less lines of code"; it has no merits whatsoever

- A big chunk of this article tries to show that ZK requires you to write less code for toy example compares to other frameworks

robbie (220.133.44.37)
Jul 29, 2008

Hi Ted,

Thanks for your questions!

Regarding server-centric, we would like to clarify some misunderstandings.
The server won't work more harder because ZK only output html, css, js to the clients. These codes run on the browsers instead of server.
ZK only sends required resources to the client, and won't load them again. So, there is no worry about the amount of data transmission.

About your feedback regarding this article, we'll be glad to hear your options about what REALLY matters when one choose which framework to use?

We really appreciate your feedback!

/robbie

Robert (220.133.44.37)
Jul 30, 2008

In my experience, regarding the less lines of code, the point is about the easiness of programming. It matters to me:)

It's about you don't need to handle the communication/synchronization between client and server, you don't need to duplicate/maintain business logic on client side (browser), you can access data with zero code (annotation), you can integrate back-end environments easily, you can use other third party components (like Gmpas, FCKeditor) in one line, etc.

Robert W.

Skandar (121.92.102.15)
Aug 29, 2008

ZK framework is AWESOME!.

I read one time about ZK in an article and I said another ajax/java framework, there are to many frameworks but one time I was irritate with GWT, I don't like anymore GWT and I searched for a new Java/Ajax framework and I found first Echo and then ZK.

Echo is also serverside, it looks ok framework but the Docs sucks and I saw have like 1 year in beta, so I remember about ZK, I came to the ZK website and went straight to the samples, "OMFG" what a framework, what a beauty, It is awesome easy and really well designed, I fell in Love really of ZK. I bought the 2 books and I'm doing my first project with it.

Congratulations to ZK team, Keep the good job, ZK is wonderful!.

Regards.

Mike (196.30.245.149)
Sep 17, 2008

I certainly hope this site is not using ZK to render this comments section. It renders awfully in all browsers on my mac including IE6 on parallels. Yeachhhh.

Simon P (86.65.18.42)
Sep 23, 2008

First of all, I'm sorry for my poor English.

I'm not totally agree with you. I've used DWR for a long time and I use now GWT since severall months.

GWT is not more client-centric than other frameworks. It's depends on how you use it. You can use GWT only for data presentation and making all work on the application server.
It's the same with basic jsp applications, you can put all your code including database connection, business logic, data presentation in one ugly file and its not a raison saying that jsp is a bad thing... only developpers doing this are bad.

Secondly, for me, regarding the less lines of code is not an argument. I use GWT every days and it's really boring to have to write severall classes to do only one thing (espacially with RPC calls), but in the other hand, you can always write the same code in perl with even less lines of code, and it can become unreadable and unmaintainable, so for me it's not a sufficient argument.

Thirdly, the ZK's overview and articles didn't convince me. I've used some other frameworks making many many job by their own, and developpers could never change anything of what the framework generates. At the end, it was not really good because developpers must do all codes as the framework want and it was very often not suitable for what we had to do. I never use ZK so I cannot speak really about it, but for me, when I hear about a tools doing complex things very easy, I always think : "If it's does it so simple in standard use case, it problably means that it can't do this at all in non standard use case".

With this reply, I don't want to denigrate ZK because I never use it, and I hope having a choice to test it in a near future to know if my first impression was good or not. I only want to encourage a discussion about it and about the advantages and disadvantages of ZK compared to GWT.
To finish, you never speak about developpement tools with ZK. Is there a good IDE with debug functionnality for exemple (like Eclipse for GWT developpements)?

Thank you for your post, I enjoy reading it

chrisco (218.214.37.154)
Sep 24, 2008

How does ZK compare with Echo?

What type of open source license is ZK released under?

Vitaliy (213.208.171.192)
Sep 24, 2008

How to write unit tests and how to debug ZK application?

robbiecheng (220.133.44.37)
Sep 26, 2008

Please refer to the following url, **Hidden Link**

davidzhuang (99.183.243.94)
Oct 03, 2008

ZK is a pretty smart and well-supported framework.

However, I found the notion of "client-centric" v.s. "server-centric" comparison with GWT is somewhat misleading. They are both presentation layer frameworks based on Ajax.

The one fundamental difference is GWT's used of RPC-style mechanism v.s. ZK's thin-client mechanism. With GWT, one can construct both stateful and stateless applications, but with ZK, your application will always be stateful and that can limit scalability.

Without Ajax, one can construct a similar framework using Applet or Java Web Start. I got involved with a development project like that many years ago in an effort to move existing desktop-based Java apps onto web. That experience told me that once the number of concurrent user increases, the responsiveness on client drops quite noticeable. So I hope someone can post a study of client responsiveness with relation to number of concurrent user sessions (or desktops in ZK's term)

robbiecheng (220.133.44.37)
Oct 06, 2008

David,

Here is a official report of ZK's performance.
**Hidden Link**

If you have any comment, please feel free to ask!

/robbie

davidzhuang (76.225.174.73)
Oct 06, 2008

Great to know good progress was made from 2.4.1 release to 3.0. I would like to encourage more report publishing on the topic of scalability/performance under more realistic scenarios.

-David

Josh (196.201.211.72)
Nov 09, 2008

Hi,
I spent several months learning how to use zk. It didnt take me long to write some nice application. Then i discovered that it has the unfriendly GPL license. That means that i cant use it on commercial projects unless i buy the commercial license. I went back to the drawing board. I discovered GWT which is distributed under Apache Public license. That means that i can use it for whatever i want. I have taken time to learn it . There are lot of nice books on it. I have learnt how to use design my applications to with MVC pattern. I can also unit test the client side code. I think GWT is the way to go.

Jack Flyman (220.133.44.37)
Nov 27, 2008

I don't think GPL is an issue, at least, for me. We are using MySQL for years. We paid only for tech supports (we are doing SaaS biz). Actually, IMO, warrantable tech support is crucial for commercial projects. GWT forum is good but no one I can really count on if something falls apart .

Sathish (203.197.24.213)
Dec 31, 2008

Hi can any one say how to write the magical java class called locator for the Gmaps.The one which Ricardo has given in his site GmapLocator.jar and the sample is not working for me.

Thanks
sathish

Daniel (81.193.115.50)
Jan 13, 2009

I have been thinking in which framework to use in a new project and came to this interesting discussion. Thanks for all the information!

One of the drawbacks of GWT would be the fact that the client presentation code has to be separeted from the server code, which can have data base access and so on.
I think several times we want to write multi-tyer application, so we really want to separate the user interface code from the business logic code. For instance, we dont want to write hibernate code in an event handler! So this is not a so big disadvantage of GWT.

Other point mentioned is that in Zkoss all program interactions have to pass by the server. This is a problem in response time. To compensate this in zkoss you can define certain behaviour in a declarative way, like when using data bindings. But that is always limited, and makes the application more complicated because it uses special syntax. In gwt you can program all this behaviours in client side, without limitatings of flexibility. Anyway, for simple behaviours we can write then in zkoss with fewer lines of code.

As you can see, at the moment I'm more willing to use GWT.

Stefan (87.227.33.44)
Jan 18, 2009

I just took a look on ZK right now. And after 30 minutes I think I can see a difference between ZK and for instance GWT. With ZK you should be able to balance how much client driven logic you have (according to the client and server engine in the architecture overview). It seems to ship with a built in mechanism to handle this.

To achieve the same thing with e.g. GWT you need to chose and code the server interaction.

Is this possible already today in ZK? i.e. to balance how much cllient driven code to have in your app.

If this is controllable it would put and end to the small, mid, large app worries.

Stefan (87.227.33.44)
Jan 18, 2009

Saw now that the GPL license is used in ZK.

I'm a bit allergic to licensing then there are so many "free" choices out there today.
It is also a great argument when selling something to a customer. To minimize the fixed costs. (I know there are other opinions)

Craig (24.130.147.247)
Feb 18, 2009

You may want to consider AribaWeb ( **Hidden Link** to implement the test cases discussed here. And it's released under the Apache License. Plus its been proven to scale in enterprise and web deployments for nearly 10 years.

Alexander (89.223.96.3)
Feb 28, 2009

Hi all! I'm sorry for my English...
I'm going to develop new social network using RIA architecture for it. In my last project (social network) we used Prototype Ajax Framework and Script.Aculo.Us. Now i'm learning a number resources about ZK, DWR, GWT and other Ajax Frameworks. There are many different points of view, and i understand that each framework has their own specific features. It all depends on what kind of application you want to develop. But i would like to know, is ZK framework suitable in my case where more than 2 millions of people will actively use the service?

MarkusW (82.135.107.129)
Mar 31, 2009

To Craig:
Thanks for your note mentioning aribaweb. It looks interesting, yet I don't think the number of lines of code you have to write is a big issue in most of the current frameworks. What bothered me more when looking into the aribaweb videos was that aribaweb's serverside code outputs "incremental HTML snippets" (that's what it reads in the slides) to the client. This means the clientside part of the framework needs to be aribaweb again, doesn't it? Even if not so, it means the one and only client that can be used to "understand" the HTML snippets is... tadaaa... a browser. No other clients are possble. That's where -to my understanding after reading for an hour or so into ZK- ZK is different from aribaweb by far. ZK makes a far more client-independent approach.
Best regards
Markus

Melvin (69.115.154.126)
Apr 02, 2009

This style-framework is the same as how asp.net does it. As data grows it slows. Gwt loads data as you need thus also provide lazy loading that makes it fast. Imagine you are just getting small data compare to posting the whole thing back and reload everything. Gwt also has live grid offering that loads reasonable rows. Search extjs live grid from google.

Damiano (82.53.50.86)
Apr 04, 2009

Hi all!
I'm quite new to ZK (I've developed my first production app for a company where I'm consultant).
I'm interested on some explanations about the future of ZK. In the documentation obout ZK 5 I've found that the framework will give options to be used in client or sever centric way and will be possible to write widgets using GWT.
Could someone clarify in more detail this?
Thanks

Praveen (204.17.31.126)
Apr 10, 2009

Hello Craig,

Is it possible to integrate an IOC framework like Spring/Guice with Ariba. Integrating zk with spring is well documented and easy whereas the Ariba docs don't mention anything about this.

Regards
Praveen

Gave up GWT (63.87.6.102)
May 11, 2009

I started learning GWT and ZK at the same time. I found ZK to be a little easier to learn initially, but I kept giving GWT more time because I felt that the client centric approach of GWT may be more scalable. However, I ran into the following problems:
1. The default widget set of GWT is not so pretty, and is limited. So I tried the GXT widgets. GXT has many good widgets, but very poor documentation. The GXT team appears to be reluctant to give away too much documentation. Even setting up the demo code took a long time in Eclipse, and I was never successful, and there were some images/resources always not included with the distribution. In comparison, the ZK demo takes less than 10 minutes to setup in Eclipse for a regular Java web developer.

2. GWT's eclipse integration is terrible, and does not even allow exporting of war files to be loaded into a servlet container. For a java developer, it is not easy to understand how to deploy the GWT application once developed. Even the cypal studio which made these tasks a little easier, is not compatible with GWT 1.6 and above.

3. GWT does require a lot more lines of code to communicate with the server

4. The security issues associated with a client centric architecture appear to be a lot more pervasive than I previously thought.

So I gave up on GWT and tried the server centric Wicket. But Wicket is surprisingly slower than ZK. I cannot understand why, but ZK is faster despite having better widget sets.

gnuyoga (80.58.252.237)
Jul 04, 2009

I Would say the comparison between GWT and ZK is not correct. Perhaps you should compare zk with smartgwt. smartgwt is a wrapper around smartclient using gwt.

More lines of code exposed ==> more customizable ;-)

Martin (78.186.204.215)
Jul 27, 2009

Hi All,

is there anybody who can help me to find that:

How can I find similar code for GWT class like this ZK code :

((Textbox)this.getFellowIfAny("username")).getValue().trim();

thanks

Dmitry (85.140.69.246)
Jul 30, 2009

I'm using Savari 4 in Mac OS X and the comments section has a horizontal scroll. I have to scroll it left and right. Very frustrating

P.S. My screen in 24"

cr (99.158.59.173)
Jul 31, 2009

Just heard about Ariba by reading this interesting thread, and I just gave it a quick try (aribaweb-5.0RC3 on a Mac), unfortunately, the Remote Table demo failed! kind of frustrating ...

Robert (122.110.165.77)
Aug 29, 2009

Hi,

Ive used ZK for 3 enterprise projects and its a brilliant step forward. Being able to write complex java code, use full advantages of java reflection to derive forms etc, and easy access to hibernate data without messing about with servlets/POST/GET/RPC/sessions and misc issues of a remote client is a huge timesaver. When you modify the datamodel in ZK its the real hibernate layer on the server, which data-bound screens read directly, so server additions like new records, default fields and new ID's just appear naturally.

Ive just completed work on a GWT/GXT based enterprise app. It was a nightmare in comparison. Without java reflection, and a host of useful Java features like Class.forName(...) the client had to be written long-hand for every screen, and the datahandling issues became very complex. RPC services proliferated, just like the old Struts servlet apps.

Every screen had to load a custom data model, hand coded,and if you navigated off the edge of a datamodel more data had to be recovered from the server. Now edit this client model, add a few records, and try merging changes back into the serverside hibernate layer. Then you have to send the result back to the client so new record ID's and serverside defaults could be integrated back ito the opened screens. There were so many issues...lots of setXXX(getXXX).We spent 75% of our time writing code that is either not required or built-in to ZK.

For a simple datamodel (eg web email) with sophisticated client and very large user base, then GWT has some appeal but for a complex data-centric app ZK is an easy winner.

Horses for courses:-)

Robert

Robert (114.75.136.99)
Aug 30, 2009

Another issue I didnt mention is the speed of the development cycle, eg code>compile>debug>compile>test etc

In ZK the java side is as fast as a normal servelt/POJO app, eg a big project is incrementally compiled/deployed into tomcat in seconds. The ZUML pages are like jsp pages, that is you edit them, reload the browser and the changes are apparent immediately. I find that incrementally writing/testing the GUI is almost immediate in ZK, so I can go through many code iterations in a few minutes. Error logs, exceptions and debug are specific, and generally easy to follow to source. Its light on memory, I can even work on an old laptop with 512Mb ram

The GWT app either needs to be compiled and run as Javascript in web mode, or run in hosted mode. On a sizeable app compiling to web mode quickly takes more than 10 minutes, there is no incremental compile. By then hosted mode takes minutes to compile/load the app and navigate several pages down. Each tiny change requires a full reload.

In web mode the debug is all javascript, and very hard to relate to your java code. In hosted mode its better, but there are still plenty of times your app just fails with no debug help at all, very frustrating when a code/compile round trip is minimum a few minutes either way. I spent a lot of time watching compiles:-)

GWT is very memory hungry in development. Dual-core CPU and 2Gb RAM had the PC constantly swapping and grinding to a halt.

Sounds like I'm awfully hard on GWT, but its actually a very impressive product, just not suited to a data-driven app. As I said before its about using the right product for the project.

Rob

thangaraj (117.201.5.178)
Sep 20, 2009

Hi All,

Nice discussions. I have also used GWT in a project. We met so many ploblem when we developing the app. At that time i concluded that we did not know all the things in GWT (even classes/functionality, approaches etc.,) so that only we had problem. OK...It is a developer problem...

1. The approach of Java to JavaScript is nice.

2. After compilation we can use in any languages(I hope...)

Here are the very basic problems that i met in GWT-

1. GWT generates so may files for a page that has even minimal operation.Makes full of disc resources.

2. It takes long time compilation.

3. Small changes need long time compilation.

Now ZK...
I am very new to zk framework. I have tested it with little application. It seems good than GWT.

Only the problem is "always server-centric approach".
This is not really good idea for "always".

Because the enterprise application will have thousands of request at a time so this will hurt the server

I expect client-centric operation also in ZK. If there is two client and server centric operation in ZK. Really will be good.
Developer can decide the centric approaches. I hope the ZK developers will note this.

Regards,
Thangaraj K,
ebbi-soft Pvt. Ltd,
Pondicherry, India.

thangaraj (117.201.5.178)
Sep 20, 2009

Hi All,

Nice discussions. I have also used GWT in a project. We met so many ploblem when we developing the app. At that time i concluded that we did not know all the things in GWT (even classes/functionality, approaches etc.,) so that only we had problem. OK...It is a developer problem...

1. The approach of Java to JavaScript is nice.

2. After compilation we can use in any languages(I hope...)

Here are the very basic problems that i met in GWT-

1. GWT generates so may files for a page that has even minimal operation.Makes full of disc resources.

2. It takes long time compilation.

3. Small changes need long time compilation.

Now ZK...
I am very new to zk framework. I have tested it with little application. It seems good than GWT.

Only the problem is "always server-centric approach".
This is not really good idea for "always".

Because the enterprise application will have thousands of request at a time so this will hurt the server

I expect client-centric operation also in ZK. If there is two client and server centric operation in ZK. Really will be good.
Developer can decide the centric approaches. I hope the ZK developers will note this.

Regards,
Thangaraj K,
ebbi-soft Pvt. Ltd,
Pondicherry, India.

Arkadiusz (89.75.143.139)
Sep 28, 2009

Framework looks very nice, but licensing is terrible, if you want to use it for commercial purposes your need to buy commercial license not once but every year are selling your software. How can I assure that price of this library will not 2 x or 10 x of current?

Arkadiusz

Syed Zuhdi (60.49.174.238)
Oct 16, 2009

Arkadiusz,check this ...

"ZK Community Edition is the most popular developer-centric Ajax solution freely available under the open source LGPL license.

100% open source, free to use, free for commercial development and deployment"

M (203.70.98.132)
Nov 04, 2009

Syed Zuhdi,
how to find the ZK Community Edition? the only license in this site is http://www.zkoss.org/license/
I think ZK's licensing is terrible for commercial use.

M (203.70.98.132)
Nov 04, 2009

sorry i found it in http://www.zkoss.org/download/zk.dsp

Mahmoud Elmaghrabi (62.135.122.50)
Dec 14, 2009

Nice, but
In ZK framework i need to write html, zscript although in GWT i just write java most of developer know java more than html, zscript

eptx (216.49.181.254)
Jul 06, 2010

@ Mahmound

You oversimplify GWT which has MUCH WORSE signal/noise than ZK. For a real GWT application, you end up writing Java, XML view files with backing view and controller Java classes, implementing google transfer objects (GTO/DTO), non-standard RPC services, etc.

We put together a GWT evaluation project that performs basic crud operations on 2 domain objects using the Google best practices, recommended architecture. We ended up with over 50 code files in the project! The corresponding ZK evaluation is underway and will likely be 5-10 code files.

Keep in mind that in ZK you have the option of zscript in one of many scripting languages or you can put the Java/zscript code in Java classes. zscript is great for quick prototyping. Then if desired, cut past the Java/zscript into Java classes to be pre-compiled. This avoids the clumsiness and inefficiency of the GWT development process. UI exploring (develop/run) is far more efficient and straightforward with ZK.

Alex (90.84.146.185)
Aug 04, 2010

Hello,
Nice entry, the same of ZK vs Lift would be as much interesting

Eugen (57.66.70.225)
Sep 29, 2010

thank you for the comparison, but its a little absurd,sorry. first you have to understand that GWT is NOT a framework, like ZK is, its rather a toolkit! for objective results you have to comapare against other frameworks like SmartGWT or ExtGWT etc which are build ontop of GWT, and please update your example at least to use the UiBinder for the layout.

on the other hand GWT allows you to develop in Java with all its advantages, yet providing support for low level DOM hacking.

regards,
Eugen

YoutubeToMp3 (79.7.61.161)
Feb 23, 2011

very nice articles, good for who search this, nice website left me say that is very pleasure visit it

http://www.youtubetomp3.net

increase intelligence (193.10.228.130)
Feb 23, 2011

I think that one of the ZK framework's goals is to prevent Java users from the HTML & JavaScript. In most of cases, ZK frameworks will take all the client side action, javascript events, HTML DOM-tree manipulation and etc. Developers should only worry about the Java doe. But, in some rare cases, accidents happen. In this situaion, there are some tools like Firebug, developer toolkit and so on for the debugging.

increase intelligence (193.10.228.130)
Feb 23, 2011

I think that one of the ZK framework's goals is to prevent Java users from the HTML & JavaScript. In most of cases, ZK frameworks will take all the client side action, javascript events, HTML DOM-tree manipulation and etc. Developers should only worry about the Java doe. But, in some rare cases, accidents happen. In this situaion, there are some tools like Firebug, developer toolkit and so on for the debugging.

<a href="http://http://www.geniusintelligence.com">increase intelligence</a>

free hcg (122.171.17.167)
Feb 26, 2011

How to grant permission for users of windows server 2003 for terminal services manager?

Convert Youtube Video (95.245.209.7)
Feb 26, 2011

Thanks a lot for this information i think that what you have write is true and a lot of user can be read more

about this tread

<a href="www.downloadyoutubevideos.com/">downloadyoutubevideos</a>

GPS Tracking (193.10.228.130)
Feb 27, 2011

We put together a GWT evaluation project that performs basic crud operations on 2 domain objects using the Google best practices, recommended architecture. We ended up with over 50 code files in the project! The corresponding ZK evaluation is underway and will likely be 5-10 code files.

schools (117.196.229.234)
Feb 28, 2011

These frameworks vary from pure JavaScript frameworks, such as Yahoo! UI (YUI), to Flash based ones such as Adobe’s AIR (Adobe Integrated Runtime). But, one important concept is often ignored by the media and general audience:

online games (122.167.28.132)
Mar 01, 2011

Hi,
I want to a download a free cricket game online. what steps should i follow?

Joshua (119.93.155.88)
Mar 01, 2011

Is there other ways on how to manipulate this one.
<a href="http://ezinearticles.com/?Rift-Guide---Soul-Systems-Rift-Guide-for-Beginners&id;=5820054">Rift Guide</a>
<a href="http://topriftguide.com/rift-warrior-builds-guide">Rift Warrior Builds Guide</a>
<a href="http://topriftguide.com/rift-mage-builds-guide">Rift Mage Builds</a>

Domenec (87.216.31.27)
Mar 02, 2011

Hello, just found this via TSS newsletter.
I didn't know ZK, but I have developed some production projects with both GWT and iceFaces, the later can be compared to ZK server-centric with data-binding.
iceFaces worked fine when all that had to be done was linking to a standard database. When the origin of data was some obscurely conceptual database (German developed, not like SAP which exposes a nice interface with jConnector: worse by far) then custom coding was not that easy. GWT server side RPC would have been easier to integrate as it exposes simply a mechanism of sending objects to the client side. As it has been said, the more standard does, the more difficult to do custom things.
Also, GWT's RPC mechanism is not that complicated, just a matter of Ctrl-F1 in Eclipse and you get most of the things done. I admit this is not Visual Basic 6, though.
For binding server data to GWT we found an standard procedure: A DAO layer was generated with Firestorm (then choose JDBC, Hibernate or EJB implementation), the metadata of the DAO is exposed in Firestorm's project XML, and it was used to automagically write the RPC layer. Just keep in mind that Firestorm generated code has to exist inside GWT's client package.
Later on customer wanted data access to be exposed as webservices via an Or*cl* Service Bus. No worries. Metadata was used again to generate an XFire (now Apache CXF) webservice layer between RPC and DAO and great kharma was achieved.
This little story is just an example to show that when you are given the task to do many things, you have the power to do it the way you want. Thanks for reading :)

Dissertation Writing UK (137.101.196.204)
Mar 02, 2011

The technology behind this is so good. Its all about web applications now. They have to get better and better due to the better technology. The work that you are doing is so good.

medical billing software (117.192.158.48)
Mar 03, 2011

Useful information shared..Iam very happy to read this article..thanks for giving us nice info.Fantastic walk-through. I appreciate this post.

Termopane Preturi (86.122.188.4)
Mar 04, 2011

I think that one of the ZK framework's goals is to prevent Java users from the HTML & JavaScript. In most of cases, ZK frameworks will take all the client side action, javascript events, HTML DOM-tree manipulation and etc. Developers should only worry about the Java doe. But, in some rare cases, accidents happen. In this situaion, there are some tools like Firebug, developer toolkit and so on for the debugging.

Free Games (79.35.215.66)
Mar 04, 2011

thanks a lot for this information, i think that what have you write is right,

nice aricles for the google XD you can find very speed this information
thanks at this web site, thanks a lot

<a href="www.freegames.fm/">Free Games</a>

Paleo Recipes (117.196.231.139)
Mar 06, 2011

Every screen had to load a custom data model, hand coded,and if you navigated off the edge of a datamodel more data had to be recovered from the server. Now edit this client model, add a few records, and try merging changes back into the serverside hibernate layer.

mortgage rates (193.10.228.132)
Mar 08, 2011

Framework looks very nice, but licensing is terrible, if you want to use it for commercial purposes your need to buy commercial license not once but every year are selling your software. How can I assure that price of this library will not 2 x or 10 x of current?

Windows Password Resetter (69.242.43.160)
Mar 10, 2011

Your blog is STELLAR! I mean, I've never been so entertained by anything in my life! Your vids are perfect for this. I mean, how did you manage to find something that matches your style of writing so well? Im really happy I started reading this today. You've got a follower in me for sure!

Cheap Viagra (119.153.88.107)
9 days ago

Thanks Good post.

Hersolution (198.53.247.167)
8 days ago

Great article, keep up the good work and I will be back often!!

machine tools (117.199.132.225)
8 days ago

Really appreciate this post. It’s hard to sort the good from the bad sometimes, but I think you’ve nailed it!

machine tools (117.199.132.225)
8 days ago

You really know your stuff... Keep up the good work!

machine tools
http://www.machinetoolsmart.com/

iPhone Monitoring App (122.129.77.10)
6 days ago

the only thing which i love in this blog is the CAPTCHE writing :D :D :D

<a href="http://www.iphonespyapp.net/iphone-monitoring-app/">iPhone Monitoring App</a>

masters in education (121.246.27.37)
5 days ago

Great to know good progress was made from 2.4.1 release to 3.0. I would like to encourage more report publishing on the topic of scalability/performance under more realistic scenarios. <a href="www.mastersineducationguides.org">masters in education</a>

Bankruptcy Attorney New York (193.10.228.136)
4 days ago

If this is controllable it would put and end to the small, mid, large app worries.

<a href="http://www.storobinspodek.com/practices_bankruptcy.php">Bankruptcy Attorney New York</a>

TinaTinka (93.87.133.91)
22 hours ago

I didn't know for Zk until I saw this article.I I learned that ZK is an open-source Ajax Web application framework, written in Java,[1][2][3] that enables creation of rich graphical user interfaces for Web applications with no JavaScript and little programming knowledge.Thanks for great application!<a href="http://tvstandsforflatscreensblog.com/">TV Stands for Flat Screens</a>

 
 
Leave a Reply
 
* Name (required)
* Mail - will not be published (required)
Website
(Case Insensitive)
Bold text
Post
Preview