<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6452845161186716370</id><updated>2011-12-23T08:53:52.209-08:00</updated><category term='Java 5 Language Features'/><category term='Java Ajax DWR'/><category term='Java Ajax'/><category term='Java Paging and Sorting'/><title type='text'>Open Source Web</title><subtitle type='html'>OpenSourceJava, Open+Source+Java, Open Source Web, Display Tags, Paging, Sorting, Java5 features,Java 5 Features, Ajax, Java</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opensourcejavaweb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://opensourcejavaweb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thoppae</name><uri>http://www.blogger.com/profile/01982854600849893001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6452845161186716370.post-438170620523525681</id><published>2009-06-29T20:41:00.000-07:00</published><updated>2009-06-29T20:47:17.102-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Ajax DWR'/><title type='text'>DWR - Direct Web Remoting</title><content type='html'>DWR stands for Direct Web Remoting.  From the name it implies that Directly making remote procedure calls. &lt;br /&gt;&lt;br /&gt; It is a technique by which interaction between&lt;br /&gt;&lt;br /&gt; client and server takes place by marshalling objects to and fro  (Java script object to Java object and vice versa). &lt;br /&gt;&lt;br /&gt; The actual remote calls takes place using Ajax with out even user know about it.&lt;br /&gt;&lt;br /&gt; It can call any java objects directly from Java script without having own servlet class, its inbuilt DWRServlet do your work.  It has inbuilt Ajax,Object Serialization etc., and it also provides&lt;br /&gt;&lt;br /&gt; utility scripts to format display data in the web page.&lt;br /&gt;&lt;br /&gt; The learning curve of DWR is steep.  User just have to know about using config file and using utility classes provided by DWR.&lt;br /&gt;&lt;br /&gt; Here is one of the simple way to implment DWR.&lt;br /&gt;&lt;br /&gt; Have these java classes in the classpath&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;DataManager.Java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;public List getCustomers(){&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        List list = new ArrayList();    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(1, "Bill", "Los Angeles", "000000001")); &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(2, "Kumar", "Chennai", 00000000020"));&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(3, "Tom", "Chicago", "000000003")); &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(4, "Chian", "Kualalumpur", 000000004"));&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(5, "Hong", "Singapore", "000000005")); &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        list.add(new Customer(6, "Jade", "Holborn", "0000000006"));&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        return list;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;Customer.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;private int id;    private String name;    private String city;    private String phone;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; //have getter/setter methods for above.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;DWR Configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Have this in claspath, preferably under WEB-INF&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;!DOCTYPE dwr PUBLIC&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    "http://getahead.org/dwr/dwr20.dtd"&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;dwr&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;  &amp;lt;allow&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;create creator="new" javascript="JDate"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;param name="class" value="java.util.Date"/&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;/create&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;create creator="new" javascript="DataManager" scope="session"&gt;            &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;        &amp;lt;param name="class" value="com.dwrtest.data.DataManager" /&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;/create&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;convert converter="bean" match="com.dwrtest.data.Customer"/&gt;  &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;  &amp;lt;/allow&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;/dwr&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;Add DWRServlet to web.xml&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;     &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;servlet&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;servlet-name&gt;dwr-invoker&amp;lt;/servlet-name&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;display-name&gt;DWR Servlet&amp;lt;/display-name&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;description&gt;DWR Servlet&amp;lt;/description&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;servlet-lass&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;div style="margin-left: 40px; background-color: rgb(255, 218, 185);"&gt;org.directwebremoting.servlet.DwrServlet&lt;br /&gt;&lt;br /&gt;   &amp;lt;/servlet-class&gt;&lt;br /&gt;&lt;br /&gt;   &lt;/div&gt;&lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;init-param&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;         &amp;lt;param-name&gt;debug&amp;lt;/param-name&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;         &amp;lt;param-value&gt;true&amp;lt;/param-value&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;/init-param&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;/servlet&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;servlet-mapping&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;servlet-name&gt;dwr-invoker&amp;lt;/servlet-name&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;      &amp;lt;url-pattern&gt;/dwr/*&amp;lt;/url-pattern&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &amp;lt;/servlet-mapping&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;Testing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;http://localhost:&amp;lt;port&gt;/&amp;lt;your-webapp-context&gt;/dwr/index.html&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; you should be able to see&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;DataManager&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;JDate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; which is defined in dwr.xml&lt;br /&gt;&lt;br /&gt; Clicking on DataManager will show methods defined in that.  You can test methods by passing required parameters if any by clicking 'Execute' buttons.&lt;br /&gt;&lt;br /&gt; If that works you can go to next step creating your jsp.&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;test.jsp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Have the below given scripts&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;script type='text/javascript' src='/dwrtest/dwr/engine.js'&gt;&amp;lt;/script&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;script type='text/javascript' src='/dwrtest/dwr/util.js'&gt;&amp;lt;/script&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;script type='text/javascript' src='/dwrtest/dwr/interface/DataManager.js'&gt;&amp;lt;/script&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;//DataManager.jsp corresponds to the name defined in dwr.xml&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;function handleData(dat) {&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;  dwr.util.addRows( "mytable",dat,[function(dat){{return dat.name}},function(dat){{return dat.city}},function(dat){{return dat.phone}}]);&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;  dwr.util.addOptions("myselect",dat,"name","name");&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;function loadData(){&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    DataManager.getCustomers(handleData);    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;    &lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;table id='mytable' border="1"&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;/table&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;Optons:&amp;lt;br/&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;select id='myselect'&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="background-color: rgb(255, 218, 185);"&gt;&amp;lt;/select&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Output&lt;p&gt;&lt;/p&gt;&lt;p&gt;Table :&lt;br /&gt;&lt;/p&gt;&lt;table id="mytable" border="1"&gt;&lt;br /&gt;   &lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Bill&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Los Angeles&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;000000001&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Kumar&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Chennai&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;00000000020&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Tom&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Chicago&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;000000003&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Chian&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Kualalumpur&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;0000000004&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Hong&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Singapore&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;000000005&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr&gt;&lt;br /&gt;       &lt;td&gt;Jade&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Holborn&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;0000000006&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;Options &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;select id="myselect"&gt;    &lt;option value="Bill"&gt;Bill&lt;/option&gt;    &lt;option value="Kumar"&gt;Kumar&lt;/option&gt;    &lt;option value="Tom"&gt;Tom&lt;/option&gt;    &lt;option value="Chian"&gt;Chian&lt;/option&gt;    &lt;option value="Hong"&gt;Hong&lt;/option&gt;    &lt;option value="Jade"&gt;Jade&lt;/option&gt;&lt;/select&gt;&lt;/p&gt;Download : &lt;a href="http://directwebremoting.org/dwr/download.html" target="_blank"&gt;DWR&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Reference : &lt;a href="http://directwebremoting.org/dwr/browser/index.html" target="_blank"&gt;Documentation&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6452845161186716370-438170620523525681?l=opensourcejavaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourcejavaweb.blogspot.com/feeds/438170620523525681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/dwr-direct-web-remoting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/438170620523525681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/438170620523525681'/><link rel='alternate' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/dwr-direct-web-remoting.html' title='DWR - Direct Web Remoting'/><author><name>Thoppae</name><uri>http://www.blogger.com/profile/01982854600849893001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6452845161186716370.post-3974414755484435595</id><published>2009-06-25T21:08:00.001-07:00</published><updated>2009-06-26T22:37:12.446-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Ajax'/><title type='text'>Java Ajax</title><content type='html'>&lt;p&gt;Ajax - stands for Asynchronous Javascript and XML. With Ajax web pages interact with Server asynchronously in the background without affecting the display/behaviour of the page. It provides rich user experince comapred to old page refresh model. I uses javascript to connect  server using XML Http Request.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"Ajax isn't a technology. It's really several technologies, each&lt;br /&gt;flourishing in its own right, coming together in powerful new ways. Ajax&lt;br /&gt;incorporates:&lt;br /&gt;  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000266.php"&gt;standards-based&lt;br /&gt;  presentation&lt;/a&gt; using XHTML and CSS;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;dynamic display and interaction using the &lt;a href="http://www.scottandrew.com/weblog/articles/dom_1"&gt;Document&lt;br /&gt;  Object Model&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;data interchange and manipulation using &lt;a href="http://www-106.ibm.com/developerworks/xml/library/x-xslt/?article=xr"&gt;XML&lt;br /&gt;  and XSLT&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;asynchronous data retrieval using &lt;a href="http://www.xml.com/pub/a/2005/02/09/xml-http-request.html"&gt;XMLHttpRequest&lt;/a&gt;;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;and &lt;a href="http://www.crockford.com/javascript/javascript.html"&gt;JavaScript&lt;/a&gt;&lt;br /&gt;  binding everything together."&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;Ajax is also a key component of Web 2.0&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.oreillynet.com/oreilly/tim/news/2005/09/30/graphics/figure1.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;XML Http Request&lt;/b&gt;(XHR)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To show how Ajax works Here is the simple code that     parses an .xml file located in server and display it is web page&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;states.xml&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Items&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Option value="CA"&amp;gt;California&amp;lt;/Option&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Option value="IL"&amp;gt;Illinois&amp;lt;/Option&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Items&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Server side code&lt;/b&gt; say AjaxTestServlet&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;try{&lt;br /&gt;&lt;br /&gt;javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();&lt;br /&gt;&lt;br /&gt;dbf.setValidating(false);          &lt;br /&gt;&lt;br /&gt;javax.xml.parsers.DocumentBuilder parser = dbf.newDocumentBuilder();&lt;br /&gt;&lt;br /&gt;String file = request.getParameter("file");&lt;br /&gt;&lt;br /&gt;org.w3c.dom.Document doc = parser.parse("http://localhost/&amp;lt;appcontext&amp;gt;/"+file);      &lt;br /&gt;&lt;br /&gt;org.w3c.dom.NodeList nList = doc.getElementsByTagName("Option");  &lt;br /&gt;&lt;br /&gt;int len = doc.getElementsByTagName("Option").getLength();  &lt;br /&gt;&lt;br /&gt;StringBuffer buff = new StringBuffer();  &lt;br /&gt;&lt;br /&gt;buff.append("&amp;lt;?xml version='1.0' encoding='UTF-8' ?&amp;gt;&amp;lt;items&amp;gt;");&lt;br /&gt;&lt;br /&gt;String attrib = "";&lt;br /&gt;&lt;br /&gt;String val = "";&lt;br /&gt;&lt;br /&gt;for(int i=0;i&amp;lt;len;i++){&lt;br /&gt;&lt;br /&gt;attrib = nList.item(i).getAttributes().getNamedItem("value").getNodeValue();&lt;br /&gt;&lt;br /&gt;val = nList.item(i).getChildNodes().item(0).getNodeValue();      &lt;br /&gt;&lt;br /&gt;buff.append("&amp;lt;option value='"+attrib+"'&amp;gt;"+val+"&amp;lt;/option&amp;gt;");&lt;br /&gt;&lt;br /&gt;}       &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;buff.append("&amp;lt;/items&amp;gt;");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;response.setContentType("text/xml");&lt;br /&gt;&lt;br /&gt;response.setHeader("Cache-Control","no-cache");&lt;br /&gt;&lt;br /&gt;response.getWriter().write(buff.toString());  &lt;br /&gt;&lt;br /&gt;}catch(Exception e){&lt;br /&gt;&lt;br /&gt;e.printStackTrace();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Client Side&lt;/b&gt; say test.html&lt;br /&gt;&lt;br /&gt;&lt;b&gt;create xhr object&lt;/b&gt;&lt;br /&gt;var xmlHttp;&lt;br /&gt;&lt;br /&gt;function createXMLHttpRequest() {&lt;br /&gt;&lt;br /&gt;if(window.ActiveXObject) {&lt;br /&gt;&lt;br /&gt;xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&lt;br /&gt;} else if(window.XMLHttpRequest) {&lt;br /&gt;&lt;br /&gt;// Firefox, Opera 8.0+, Safari&lt;br /&gt;&lt;br /&gt;xmlHttp = new XMLHttpRequest();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;b&gt;&lt;br /&gt;&lt;br /&gt;response handler&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;function handleServerResponse() {&lt;br /&gt;&lt;br /&gt;var elements ;&lt;br /&gt;&lt;br /&gt;var elemSize ;&lt;br /&gt;&lt;br /&gt;var server_response = "";  &lt;br /&gt;&lt;br /&gt;if(xmlHttp.readyState == 4) { // the state when the request has completed    &lt;br /&gt;&lt;br /&gt;if (xmlHttp.status == 200) { // the status code returned from the server    &lt;br /&gt;&lt;br /&gt;elements = xmlHttp.responseXML.getElementsByTagName("option");&lt;br /&gt;&lt;br /&gt;elemSize = elements.length;&lt;br /&gt;&lt;br /&gt;for(var i=0;i&amp;lt;elemSize;i++)    {&lt;br /&gt;&lt;br /&gt;server_response = server_response+elements[i].getAttribute("value")+"      : "+elements[i].firstChild.data+"&amp;lt;br&amp;gt;";&lt;br /&gt;&lt;br /&gt;}    &lt;br /&gt;&lt;br /&gt;}else{&lt;br /&gt;&lt;br /&gt;server_response='No Data';&lt;br /&gt;&lt;br /&gt;}  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;document.getElementById("mydiv").innerHTML = "&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;"+server_response+"&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;b&gt;&lt;br /&gt;&lt;br /&gt;request handler&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;function doProcess(fileName){&lt;br /&gt;&lt;br /&gt;createXMLHttpRequest();  &lt;br /&gt;&lt;br /&gt;xmlHttp.open("GET", "testAjaxProcess.jsp");&lt;br /&gt;&lt;br /&gt;xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");&lt;br /&gt;&lt;br /&gt;xmlHttp.send("file="+fileName);&lt;br /&gt;&lt;br /&gt;xmlHttp.onreadystatechange = handleServerResponse;&lt;br /&gt;&lt;br /&gt;return false;&lt;br /&gt;&lt;br /&gt;}&lt;b&gt;&lt;br /&gt;&lt;br /&gt;html code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="#" onclick="javascript:doProcess('states.xml')"&amp;gt;STATES&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;div id="mydiv"&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Output :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;CA      : California&lt;br /&gt;IL      : Illinois&lt;br /&gt;&lt;br /&gt;There are many open source frameworks availabe to implement Ajax. But I would suggest to start with raw code to know working of actual objects&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6452845161186716370-3974414755484435595?l=opensourcejavaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourcejavaweb.blogspot.com/feeds/3974414755484435595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/java-ajax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/3974414755484435595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/3974414755484435595'/><link rel='alternate' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/java-ajax.html' title='Java Ajax'/><author><name>Thoppae</name><uri>http://www.blogger.com/profile/01982854600849893001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6452845161186716370.post-2442224923738742057</id><published>2009-06-25T21:05:00.000-07:00</published><updated>2009-06-26T22:41:42.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Paging and Sorting'/><title type='text'>Java Paging and Sorting</title><content type='html'>&lt;p&gt;Paging and Sorting in jsp can be done in easy steps using Display Tags java library.&lt;br /&gt;&lt;br /&gt;The display tag library is an open source suite of custom tags that&lt;br /&gt;provide high-level web presentation patterns which will work in an MVC&lt;br /&gt;model. The library provides a significant amount of functionality while&lt;br /&gt;still being easy to use.&lt;br /&gt;&lt;br /&gt;Here is the simple steps to implements&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Customer.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;int id;&lt;br /&gt;String name;&lt;br /&gt;String city;&lt;br /&gt;String phone;     &lt;b&gt;&lt;br /&gt;&lt;br /&gt;DisplayTagAction.java (Struts Action)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;execute(.....){&lt;br /&gt;List list = new ArrayList();         list.add(new Customer(1, "Bill", "Los Angeles", "000000001"));&lt;br /&gt;list.add(new Customer(2, "Kum", "Chennai", "00000000020"));&lt;br /&gt;list.add(new Customer(3, "Tom", "Chicago", "000000003"));&lt;br /&gt;list.add(new Customer(4, "Chian", "Kualalumpur", "0000000004"));&lt;br /&gt;list.add(new Customer(5, "Hong", "Singapore", "000000005"));&lt;/p&gt;&lt;p&gt;list.add(new Customer(6, "Jade", "Holborn", "0000000006"));&lt;br /&gt;request.setAttribute( "test", list );&lt;br /&gt;//...forward to customers.jsp&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;customers.jsp&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;display:table cellspacing="4" name="test" export="xls" pagesize="2" requestURI="/displayTag.do"  defaultorder="ascending"  &amp;gt;&lt;br /&gt;&amp;lt;display:column class="" property="name" sortable="true" title="Name"/&amp;gt;&lt;br /&gt;&amp;lt;display:column property="city" title="City"  sortable="true"/&amp;gt;&lt;br /&gt;&amp;lt;display:column property="phone" title="Phone"/&amp;gt;&lt;br /&gt;&amp;lt;/display:table&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;result will look like:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="pagebanner"&gt;6 items found,&lt;br /&gt;displaying 1 to 3.&lt;/span&gt;&lt;span class="pagelinks"&gt;[First/Prev] &lt;strong&gt;1&lt;/strong&gt;,&lt;br /&gt;&lt;a href="http://www.blogger.com/displayTag.do?d-49653-p=2" title="Go to page 2"&gt;2&lt;/a&gt; [&lt;a href="http://www.blogger.com/displayTag.do?d-49653-p=2"&gt;Next&lt;/a&gt;/&lt;a href="http://www.blogger.com/displayTag.do?d-49653-p=2"&gt;Last&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;&lt;table style="width: 284px; height: 249px;" border="1" cellspacing="4"&gt;   &lt;thead&gt;     &lt;tr&gt;         &lt;th class="sortable"&gt;&lt;a href="http://localhost:9080/StrutsPagingTest_Web/displayTag.do?d-49653-o=2&amp;amp;d-49653-s=0"&gt;Name&lt;/a&gt;&lt;/th&gt;&lt;br /&gt;       &lt;th class="sortable"&gt;&lt;a href="http://localhost:9080/StrutsPagingTest_Web/displayTag.do?d-49653-o=2&amp;amp;d-49653-s=1"&gt;City&lt;/a&gt;&lt;/th&gt;&lt;br /&gt;       &lt;th&gt;Phone&lt;/th&gt;       &lt;/tr&gt;&lt;br /&gt;&lt;/thead&gt;&lt;br /&gt;&lt;tbody&gt;&lt;br /&gt;   &lt;tr class="odd"&gt;&lt;br /&gt;       &lt;td class=""&gt;Bill&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Los Angeles&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;000000001&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr class="even"&gt;&lt;br /&gt;       &lt;td class=""&gt;Kum&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Chennai&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;00000000020&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;   &lt;tr class="odd"&gt;&lt;br /&gt;       &lt;td class=""&gt;Tom&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;Chicago&lt;/td&gt;&lt;br /&gt;       &lt;td&gt;000000003&lt;/td&gt;&lt;br /&gt;   &lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Display tags java library can be used for many other purposes like Subtotalling(using column grouping), Exporting data to CSV,Excel,XML,PDF,RTF, etc.,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://displaytag.sourceforge.net/1.2/images/sample_snapshot.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resouce :&lt;br /&gt;Download : &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=73068" target="_blank"&gt;displaytag library&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=73068" target="_blank"&gt;Tag reference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://displaytag.sourceforge.net/1.2/tut_basic.html" target="_blank"&gt;User guide&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6452845161186716370-2442224923738742057?l=opensourcejavaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourcejavaweb.blogspot.com/feeds/2442224923738742057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/paging-and-sorting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/2442224923738742057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/2442224923738742057'/><link rel='alternate' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/paging-and-sorting.html' title='Java Paging and Sorting'/><author><name>Thoppae</name><uri>http://www.blogger.com/profile/01982854600849893001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6452845161186716370.post-2197077239102533796</id><published>2009-06-25T21:00:00.000-07:00</published><updated>2009-06-26T22:09:50.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Paging and Sorting'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 5 Language Features'/><category scheme='http://www.blogger.com/atom/ns#' term='Java Ajax'/><title type='text'>Java 5 Language Features</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;&lt;meta name="GENERATOR" content="IBM Software Development Platform"&gt;&lt;meta equiv="Content-Style-Type" content="text/css"&gt;&lt;link href="../../theme/Master.css" rel="stylesheet" type="text/css"&gt;&lt;title&gt;a5features.html&lt;/title&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The Java 2 Platform Standard Edition Development Kit 5.0 (JDK 5.0) is a feature release of the Java platform. It contains new features and enhancements in many functional areas. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="list-style-type: disc;"&gt;The major Language feature enhancements are&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;   &lt;li&gt;&lt;b&gt; &lt;/b&gt;Generics&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Autoboxing/Unboxing&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Enhanced for Loop&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Typesafe Enums&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Varargs&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;Static Import&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p style="list-style-type: disc;"&gt;&lt;font style="list-style-position: inside;"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;br /&gt;Generics&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Generics adds compile-time type safety to the Collections Framework and eliminates casting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;List list = new ArrayList();&lt;br /&gt;&lt;br /&gt;list.add(new String("Test")); // store any object type&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get the data you will do&lt;br /&gt;&lt;br /&gt;String s = (String)list.get(0); // Need explicit casting&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Java 5, we can define the datatype for what we are going to store by using generics so that explicit casting is not required.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;String&amp;gt;(); // here we have mentioned which datatype we are going to store.&lt;br /&gt;&lt;br /&gt;list.add(new String(""));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you add any other datatype to the above list object it will give compile time error&lt;br /&gt;&lt;br /&gt;list.add(new Integer(1)); // will give compile time error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Getting the data out&lt;br /&gt;String s = list.get(0); // No explicit casting required&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Autoboxing/Unboxing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It elminates monotonous routine work/overhead to convert values of primitive types to objects of the corresponding wrapper classes&lt;br /&gt;&lt;br /&gt;and Wrappr classes to primitive data types.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;double d = 100.50;&lt;br /&gt;&lt;br /&gt;Double doubleObj = new Double(i);  to Wrapper class. Explicity convertion.&lt;br /&gt;&lt;br /&gt;double dConverted = doubleObj.doubleValue(); // to primitive data type. Explicit convertion.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Java 5, We can convert it like this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Double doubleObj = d; //Auto boxing(primitive type to Wrapper class).&lt;br /&gt;&lt;br /&gt;double dConverted = doubleObj // Auto Unboxing(wrapper class to primitive data type).&lt;br /&gt;&lt;font&gt;&lt;font&gt;&lt;u&gt;&lt;font&gt;&lt;b&gt;&lt;/b&gt;&lt;/font&gt;&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enhanced for Loop&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Iterating Collections with for loop (using ; ; format)was bit ugly and   time consuming which involves getting the object from collection, Cast to the object's data type. It is uglier with nested loops.&lt;br /&gt;List list = new ArrayList();&lt;br /&gt;&lt;br /&gt;Person person1 = new Person();&lt;br /&gt;&lt;br /&gt;person1.setFirstName("1First");&lt;br /&gt;&lt;br /&gt;person1.setLastName("1Last");&lt;br /&gt;list.add(person1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Person person2 = new Person();&lt;br /&gt;&lt;br /&gt;person2.setFirstName("2First");&lt;br /&gt;&lt;br /&gt;person21.setLastName("2Last");&lt;br /&gt;&lt;br /&gt;list.add(person2);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for(int i=0;i&amp;lt;list.size();i++)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt; Person person = (Person)list.get(i);&lt;br /&gt;&lt;br /&gt;System.out.prinln("FirstName : "+person.getFirstName()+" Last Name : "+person.getLastName());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Java 5, we can write the same code as&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;List&amp;lt;Person&amp;gt; persons = new ArrayList&amp;lt;Person&amp;gt;();&lt;br /&gt;list.add(person1)&lt;br /&gt;;&lt;br /&gt;list.add(person2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for(Person person : persons)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;System.out.prinln("FirstName : "+person.getFirstName()+" Last Name : "+person.getLastName());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html"&gt;&lt;b&gt;TypeSafe&lt;br /&gt;Enums&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Typesafe enums defined as set of symbolic names and values.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Previous to Java 5 any enums defined and used as below&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;final int MONDAY = 1;&lt;br /&gt;final int TUESDAY = 2;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;calculateNextDay(MONDAY)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It has following disadvantages&lt;br /&gt;&lt;br /&gt;It is 'Not TypeSafe' - we can pass any int value in above method as calculateNextDay(2)&lt;br /&gt;It has 'No namespage' - first monday can be defined as 'FIRST_MONDAY' a String prefix need to be added to identify.&lt;br /&gt;It has 'No informative representation' when we print that variable. In this case, printing MONDY will print 1.&lt;br /&gt;It has 'Constants need to be Compiled' when the constant value changes, we need to compile the class for the changes to take effect&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;with Java 5&lt;br /&gt;enum DAYS{MONDAY,TUESDAY}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System.out.prinln(DAYS.MONDAY);// will print MONDAY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;values (returns array of enums) and valueOf (returns value of enum for the passed in value) are the most useful method&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public enum OfficeHours {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;INTIME(8,30),OUTTIME(5,30),LUNCHTIME(12,30);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OfficeHours(int h,int m){&lt;br /&gt;&lt;br /&gt;this.hh = h;&lt;br /&gt;&lt;br /&gt;this.mm=m;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private int hh;&lt;br /&gt;&lt;br /&gt;private int mm;&lt;br /&gt;&lt;br /&gt;public int getHour() { return this.hh; }&lt;br /&gt;&lt;br /&gt;public int getMins() { return this.mm; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for(OfficeHours oHrs : OfficeHours.values()){&lt;br /&gt;&lt;br /&gt;System.out.println(oHrs+" is "+oHrs.getHour()+" : "+oHrs.getMins());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The detailed explaination for Enum is availabe &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html" target="_blank"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;VarArg&lt;/b&gt;s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Before Java 5 when a set of values need to be passed to an method We should put the values in array or any collection and then pass it to a method&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Java 5 we can pass set of values in varargs format&lt;br /&gt;&lt;br /&gt;Syntax is Datatype... name i.,e Object... arg&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public static void extract(String... x){&lt;br /&gt;&lt;br /&gt;for(String m : x){&lt;br /&gt;&lt;br /&gt;System.out.println("The month is "+m);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;extract("Jan","Feb","March")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html" target="_blank"&gt;more details&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Static Import&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;with static impor  we can access static members without having qualified(means without using classname)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import static org.apache.commons.lang.time.DateUtils.*; // all the static memebers can be accessed with out using class name DateUtils&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System.out.println("Milliseconds per hour : "+MILLIS_PER_HOUR);// instead of DateUtils.MILLIS_PER_HOUR&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References : &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html" target="_blank"&gt;Java 5 Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6452845161186716370-2197077239102533796?l=opensourcejavaweb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opensourcejavaweb.blogspot.com/feeds/2197077239102533796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/java-5-language-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/2197077239102533796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6452845161186716370/posts/default/2197077239102533796'/><link rel='alternate' type='text/html' href='http://opensourcejavaweb.blogspot.com/2009/06/java-5-language-features.html' title='Java 5 Language Features'/><author><name>Thoppae</name><uri>http://www.blogger.com/profile/01982854600849893001</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
