Reputation: 105
I am trying different ways to make a 4 dependent dropdowns. By selecting the first one populate 2 and on selection of 2nd popluate 3rd drop down and on selection of 3rd Drop down get the list of items for 4th drop down.
On doing the research I found this ONE close to what I am thinking. By this is normal jsp and ajax getting used. I am looking for a struts2 based and also this example uses multiple pages to get the list. Each list is based on a different jsp page.http://www.roseindia.net/answers/viewqa/Ajax/15250-DropDown-in-ajax+jsp.html
The strtus2 double select works pretty good but it is restricted to only two drop downs. Is there anyway we can extend that to more or or any tutorial or help is greatly appreciated.
Upvotes: 2
Views: 4307
Reputation: 105
Struts2-Jquery is helpful in getting this solution worked. but not much of help from Google and the tutorials are half done. I thought it will be useful for others whoever wants to implement in their projects. Hence sharing it below. I will try to upload this war file and share the link here.
Web.xml
<?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/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
<display-name>Struts2 Application</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Struts.xml
<?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.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" extends="json-default" namespace="/">
<action name="jsonsample" class="net.action.JsonSample">
<result type="json" />
</action>
</package>
</struts>
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<sj:head jqueryui="true" />
<div id="col3">
<div id="col3_content" class="clearfix">
<s:form id="formSelectReload" action="jsonsample" theme="simple"
cssClass="yform">
<fieldset>
<legend>AJAX Form</legend>
<div class="type-text">
<label for="language">Country: </label>
<s:url id="remoteurl" action="jsonsample" namespace="/"/>
<sj:select href="%{remoteurl}" id="country" onChangeTopics="reloadsecondlist" name="country"
list="countryMap" listKey="myKey" listValue="myValue" emptyOption="false"
headerKey="-1" headerValue="Please Select a Country"/>
</div>
<div class="type-text">
<label for="echo">State: </label>
<s:url id="remoteurl" action="jsonsample" namespace="/"/>
<sj:select href="%{remoteurl}" id="stateID" onChangeTopics="reloadThirdlist" formIds="formSelectReload"
reloadTopics="reloadsecondlist" name="state"
list="stateMap" listKey="myKey" listValue="myValue" emptyOption="false"
headerKey="-1" headerValue="Please Select a State"/>
</div>
<div class="type-text">
<label for="echo">City: </label>
<s:url id="remoteurl" action="jsonsample" namespace="/"/>
<sj:select href="%{remoteurl}" id="cityId" formIds="formSelectReload" reloadTopics="reloadThirdlist"
name="echo" list="cityList" emptyOption="false"
headerKey="-1" headerValue="Please Select a City"/>
</div>
</fieldset>
</s:form>
</div>
</div>
JSonSample.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
public class JsonSample extends ActionSupport {
private Map<String,String> countryMap;
private Map<String,String> stateMap;
private List<String> cityList;
private String country;
private String state;
private String city;
public String execute() {
countryMap = new HashMap<String,String>();
countryMap.put("1", "USA");
countryMap.put("2", "India");
stateMap = new HashMap<String,String>();
if(country != null && country.equalsIgnoreCase("1")){
stateMap.put("1", "New York");
stateMap.put("2", "new jersey");
} else if(country != null && country.equalsIgnoreCase("2")){
stateMap.put("1", "Karnataka");
stateMap.put("2", "Andhra Pradesh");
}
cityList = new ArrayList<String>();
if(country != null && country.equalsIgnoreCase("1") && state != null && state.equalsIgnoreCase("1")){
cityList.add("New York City 1");
cityList.add("New York City 2");
} else if(country != null && country.equalsIgnoreCase("1") && state != null && state.equalsIgnoreCase("2")){
cityList.add("New Jersey City 1");
cityList.add("New Jersey City 2");
} else if(country != null && country.equalsIgnoreCase("2") && state != null && state.equalsIgnoreCase("1")){
cityList.add("Karnataka City 1");
cityList.add("Karnataka City 2");
} else if(country != null && country.equalsIgnoreCase("2") && state != null && state.equalsIgnoreCase("2")){
cityList.add("AP City 1");
cityList.add("Ap City 2");
}
return SUCCESS;
}
public String getJSON() {
return execute();
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Map<String, String> getCountryMap() {
return countryMap;
}
public Map<String, String> getStateMap() {
return stateMap;
}
public List<String> getCityList() {
return cityList;
}
public String index() {
return "success";
}
}
Jar Files used:
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang-2.4.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
commons-logging-api-1.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
struts2-jquery-plugin-3.7.0.jar
struts2-json-plugin-2.3.16.3.jar
xwork-core-2.3.16.3.jar
Upvotes: 5