Struts 2 Type Conversion

Struts 2 Type Conversion

In this article, I am going to discuss Type conversion in Struts 2 with Examples. Please read our previous article where we discussed Struts 2 Localization.

What is Type Conversion in Struts 2?

The following data types can be handled by default by Struts2:

  • int, float, double
  • Date, DateTime
  • Arrays, Collections
  • Enumerations
  • Boolean

Any other datatypes (especially ones designed by the programmer) need to convert the values before displaying them

What happens if we do not implement type conversion?

Step 1: Create a new maven project in Eclipse. We will use Maven to manage the dependencies of struts2. This way, we do not have to import JARs.

What happens if we do not implement type conversion?

Remember to set the packaging to war. This is because we shall be deploying a web application.

What happens if we do not implement type conversion?

Finally, click on the finish button to create the project. The following project directories need to be created:

What happens if we do not implement type conversion?

Step 2: Modify pom.xml to add the required dependencies and the build configuration:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dotnet</groupId>
  <artifactId>strutex</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <dependencies>
   <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>6.1.2.1</version>
   </dependency>
   
   <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>6.1.2.1</version>
   </dependency>
   
   <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts-taglib</artifactId>
    <version>1.3.10</version>
   </dependency>
   
   <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.3</version>
   </dependency>
   
   <dependency>
     <groupId>taglibs</groupId>
     <artifactId>standard</artifactId>
     <version>1.1.2</version>
   </dependency>
   
   <dependency>
     <groupId>javax.servlet.jsp.jstl</groupId>
     <artifactId>jstl-api</artifactId>
     <version>1.2</version>
  </dependency>
  
  <dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>javax.servlet.jsp-api</artifactId>
     <version>2.3.3</version>
     <scope>provided</scope>
 </dependency>

  </dependencies>
  
  <build>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
    	  <artifactId>maven-compiler-plugin</artifactId>
    	  <version>3.11.0</version>
    	  <configuration>
     <source>17</source>
     <target>17</target>
    </configuration>
    </plugin>
   </plugins>
  </build>
</project>

Step 3: In the src/main/webapp directory, create a new file called index.jsp. This file displays the name of the school and the city that is located in. Add the following content to the file:

<%@ page language = "java"
contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>

<%@ taglib prefix = "s"
uri = "/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
   		<title>School Details</title>
   </head>
   
   <body>
  School Name: <s:property value = "school"/><br/>
      	City:<s:property value = "city"/>
   </body>
</html>

Step 4: In the src/main/java directory, create a new file called School.java. This file is the user-defined data type. Add the following content to the file:

package com.dotnet;

public class School
{
 public String name;

 public School(String name) {
  super();
  this.name = name;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

Step 5: In the src/main/java directory, create a new file called SchoolDisplayAction.java. The file contains the Java action code. Add the following content to the file:

package com.dotnet;

import com.opensymphony.xwork2.ActionSupport;

public class SchoolDetailsAction extends ActionSupport
{
 private School school = new School("Dotnet School");
 private String city = "New York";
 
 public String execute()
 {
  return SUCCESS;
 }

 public School getSchool() {
  return school;
 }

 public void setSchool(School school) {
  this.school = school;
 }

 public String getCity() {
  return city;
 }

 public void setCity(String city) {
  this.city = city;
 }
}

Step 6: In the src/main/resources directory, create a new file called struts.xml. The file is responsible for configuring struts2. Add the following content to the file:

<?xml version = "1.0" 
encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   
   <package name = "helloworld" extends = "struts-default">
   
      <action name = "SchoolDetailsAction"
      class = "com.dotnet.SchoolDetailsAction"
      method = "execute">
         <result name = "success">/index.jsp</result>
      </action>
      
   </package>
</struts>

Step 7: In the src/main/webapp directory, create a new directory called WEB-INF. In this directory, create a new file called web.xml. This file is responsible for implementing struts2 in the web application. Add the following content to the file:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemalocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/web-app_3_0.xsd"
id="apache-struts-config-example"
version="3.0">

 <display-name>Struts Config XML</display-name>
 
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

</web-app>

Step 8: Compile and execute the program on the Tomcat server. The following page must open in your default web browser:

How to Implement Type Conversion?

You will notice that the name of the school is not shown properly. A type conversion is required, as shown below:

How to Implement Type Conversion?

Step 1: In the src/main/java directory, create a new file called SchoolConverter.java. The file contains the Java code which is responsible for converting objects of type School to/from Strings. Add the following content to the file:

Type conversion in Struts 2 with Example

Step 2: In the src/main/webapp/WEB-INF directory, create a new file called xwork-conversion.properties. This file is responsible for telling struts2 to use the aforementioned conversion code. Add the following line into the file:

Type conversion in Struts 2 with Example

Step 3: Compile and execute the program on the Tomcat server. The following page must open in your default web browser:

Type conversion in Struts 2 with Example

As can be seen, the details are displayed correctly. Congratulations! You now know how to implement type conversion in struts2!

In the next article, I am going to discuss Struts 2 Exception Handling with Examples. Here, in this article, I try to explain Struts 2 Type Conversion with Examples and I hope you enjoy this Struts 2 Type Conversion article.

Leave a Reply

Your email address will not be published. Required fields are marked *