Archive for the ‘Tutorials’ Category

Struts2 and AJAX - Using Dojo Div - Part I

Wednesday, January 16th, 2008

Download Source | View Demo

Important : This example uses Struts 2.0.11. Struts2 Ajax support is experimental is undergoing rapid changes. I will update this example once Struts 2.1 is released.

One of the biggest improvements in Struts2 compared to Struts is its first class AJAX support. All the core Struts2 components are developed with a view of deploying in a highly responsive AJAX mode. In this post, I will look at the Struts2 div tag which can be used to render Ajax content. This component internally uses Dojo library for Ajax functionality.

To demonstrate this, I will create a very simple use case. The use case consists of a single screen which lists a number of users in a table. When a userid link is clicked, user details is shown at the bottom. For displaying user details we will use Ajax.

Following are the files used in this sample Struts2 project. The code listing is also given below.

1. web.xml
J2EE configuration file

2. struts.xml
Mvc configuration for struts

3. userlisting.jsp

4. userdetail.jsp
This displays user details and is loaded using Ajax from userlisting.jsp

5. UserListingAction.java (under package ajaxdemo/action)
Prepares data for user listing and dispatches to userlisting.jsp. In a real application, this will connect to datasource through a business layer.

6. UserDetailAction.java (under package ajaxdemo/action)
This loads the data when a userid is selected in userlisting.jsp. This is called via Dojo Ajax.

7. UserListDTO.java (under package ajaxdemo/dto
This encapsulates details of a single user displayed in the list. Contains id and name. DTO stands for Data Transfer Object.

8. UserDetailDTO.java (unser package ajaxdemo/dto)
This encapsulates the complete details of a specific user.

When you access the URL http://localhost:8084/ajaxdemo/UserListingAction.action, UserListingAction prepares the data and it forwards to the userlisting.jsp. For Ajax, we use div tag in Struts2 tag library. Whenever a userid is clicked in the list, JavaScript function notifies the div tag to dynamically load content from a URL. In this case it is UserDetailAction which in turn gets data corresponding to the selected userid and dispatches to userdetail.jsp. The content returned by userdetail.jsp is loaded under Struts div tag.

As you can see the entire Ajax plumbing is hidden from the application developer and it is possible to quickly build highly responsive Web applications using this simple technique.

This sample application is hosted here. Check out to see the beauty of Struts2 Ajax. You can also download the entire source as a war file.


Note: We don’t want the user details to be loaded initially. But as of Struts 2.0.11, it is not possible to prevent the initial Ajax call. It seems that Struts 2.1 has introduced an attribute “preload” for preventing initial Ajax load. The work around here is to check the userid before returning any content.

In the next part we will look at each of the files in detail.

Getting started with Struts2 using NetBeans as IDE

Monday, January 14th, 2008

In this post, I will look at how Web application development can be started with Struts2. I am using Ubuntu. If you are using other operating systems such as Windows follow similar steps for the platform.

1. Install Java - The first step is to install latest production release of Java. Download J2SE 1.6 from Sun’s Java site - http://java.sun.com/. On Ubuntu, you can use apt-get as given below.

sudo apt-get install sun-java6-bin

After installation, verify the Java version by running the following in the command prompt,

javac -version

2. Install IDE for development - For Web application development there are a lot of IDEs out there. My favorites are Eclipse, NetBeans, JBuilder, WebSphere Application Developer and IntelliJ IDEA. For this example I will use NetBeans since it is free and the download size is reasonable. You can download it from http://www.netbeans.org/

3. Download Struts2 libraries - For developing Struts2 applications, the minimum you need are the base libraries. You can download them from http://struts.apache.org/. Download “Essential Dependencies Only” zip file which is about 5MB.

4. Creating Your first Struts2 Web Application - We will go with a very simple example in which we want the Web application to print “Hello World”. Here are steps required.

(a) Start NetBeans and then create a new Web application. From File->New Project choose Web->Web Application. In the project properties, give the application name as HelloWorld and context name as /HelloWorld. You can either choose Tomcat or Glassfish server. I prefer to use Tomcat. You will get a standard blank Web Application created.

(b) Add Struts2 libraries. For this add a folder “lib” under WEB-INF. Then copy only the following “Essential Dependencies” Jar files from the Struts zip you downloaded. Also add all the jars to compilation path under “project properties”->”libraries”.

Minimum set of jars with which you can start a Struts2 Web project (xxx stands for the latest version number),

commons-logging-xxx.jar
fremarker-xxx.jar
ognl-xxx.jar
struts2-core-2.xx.jar
xwork-xxx.jar

(c) Create web.xml under WEB-INF folder and struts.xml under the root folder for “Source Packages”.

web.xml configures Struts2 to handle all URLs as shown below.

struts.xml configures action classes to URL paths as shown below. It also configures the view component to be invoked after executing controller class.

(d) Create HelloWorld.java under “Source Packages” which is an action class in Struts2 speak. This acts as the controller. The SUCCESS return value points to the view element under default result tag in struts.xml, which in this case is HelloWorld.jsp

(e) Create HelloWorld.jsp under root of Web Content (which is “Web Pages” folder in NetBeans).

(f) “Run the Main Project” from NetBeans and access the URL “http://localhost:8084/HelloWorld/HelloWorld.action” from browser. You should see “Hello World!” in the browser. Now you are all set to start Struts2 Web Application Development!