DWR ajax国家地区カスケードメニュー作成

8937 ワード

JAvaファイルの内容:



/**
 *          
 */
public class Address {
	private AddressService addressService;

	/**
	 *      @ Write time: 2007-6-26   02:39:07 <Br>
	 * @return List<State><br>
	 */
	public List getCountries() {
		List countries = null;
		countries = addressService.getAllCountry();
		return countries;
	}

	/**
	 *           @ Write time: 2007-6-26   02:39:07 <Br>
	 * @param id
	 *                
	 * @return List<State><br>
	 */
	public List getStates(String id) {
		List states = null;
		if (!isNumber(id)) {
			System.out.println("Country id is not a number!");
			states = new LinkedList();
			return states;
		}

		states = addressService.getStateByCountryId(Long.parseLong(id));
		return states;
	}

	/**
	 *          @ Write time: 2007-6-26   02:39:07 <Br>
	 * @param id
	 *               
	 * @return List<City><br>
	 */
	public List getCities(String id) {
		List cities = null;
		if (!isNumber(id)) {
			System.out.println("State id is not a number");
			cities = new LinkedList();
			return cities;
		}

		cities = addressService.getCityByStateId(Long.parseLong(id));

		return cities;
	}
	/**
	 *   State            
	 */
	public Object getStateByCityId(String id) {

		if (!isNumber(id)) {
			System.out.println("City id is not a number");
			return null;
		}
		return addressService.getStateByCityId(Long.parseLong(id));
	}

	/**
	 *               
	 * @author: Sivyer <br>
	 * @write time: 2007-10-12   03:14:47  <Br>
	 * @param id
	 * @return<br>
	 */
	public Object getCountryByStateId(String id) {

		if (!isNumber(id)) {
			System.out.println("State id is not a number");
			return null;
		}

		return addressService.getCountryByStateId(Long.parseLong(id));
	}

	private boolean isNumber(String s) {
		Pattern pattern = Pattern.compile("[0-9]");
		Matcher isNum = pattern.matcher(s);
		if (isNum.matches()) {
			return true;
		} else
			return false;
	}

	public AddressService getAddressService() {
		return addressService;
	}

	public void setAddressService(AddressService addressService) {
		this.addressService = addressService;
	}
}


jsファイル内容



<!--
/*
 	  :Sivyer 2007-6
	  :    ,     : initAddress() 
	 : init() ,         country/state/city  select
		initDiv(),        Div ,name    "addressDiv"
 
*/


var selCountry = "selCountry";
var selState = "selState";
var selCity = "selCity";

var defaultCountry = -1;
var defaultState = -1;
var defaultCity = -1;

var countryHead = 	{ '-1':'...      ...'};
var stateHead = 	{ '-1':'...      ...'};
var cityHead = 		{ '-1':'...      ...'};

function setDefaultValue(_country,_state,_city){
	defaultCountry = _country;
	defaultState = _state;
	defaultCity = _city;
	
}

function initAddress() {

	if(defaultCountry ==""){
		defaultCountry == -1;
	}
	if(defaultState == ""){
		defaultState == -1;
	}
	if(defaultCity == ""){
		defaultCity == -1;
	}
	
	getCountries();
}

/*
      
*/
function getCountries() {
try{
	
	Address.getCountries(function (countries) {
		
		clearCountry();
		
		DWRUtil.addOptions(selCountry , countries, "id", "name");
		DWRUtil.setValue(selCountry,defaultCountry);
		
		getStates();
	});
	}catch(e){
		alert("        " + e);
	}
}

function getStates() {
	try{
	
	var countryId = getSelectId(selCountry);

	if (countryId != -1) {
		Address.getStates(countryId, function (states) {
			clearState();
			DWRUtil.addOptions(selState, states, "id", "name");
			
			DWRUtil.setValue(selState,defaultState);
			defaultState = getSelectId(selState);
			getCities();
		});
	} else {
		clearState();
		clearCity();
		getCities();
	}
	}catch(e){
		alert("        !" + e);
	}
	
}
function getCities() {
	try{
		var stateId = getSelectId( selState );
		var countryId = getSelectId( selCountry );
		
		if (stateId != -1 && countryId != -1) {
			Address.getCities(stateId, function (cities) {
				clearCity();
				DWRUtil.addOptions(selCity, cities, "id", "name");
				
				if(getSelectId(selState) != -1 && getSelectId(selCountry) != -1){
					DWRUtil.setValue(selCity,defaultCity);
					defaultCity = getSelectId(selCity);
				}
			});
		}else if(stateId == -1 && countryId == -1 && defaultCity != -1){
			clearCity();
		}
		
	}catch(e){
		alert("        !" + e);
	}
}

function clearCountry(){
	defaultCountry = -1;
	DWRUtil.removeAllOptions(selCountry);
	DWRUtil.addOptions(selCountry,countryHead);
}
function clearState(){
	defaultState = -1;
	DWRUtil.removeAllOptions(selState);
	DWRUtil.addOptions(selState,stateHead);
}
function clearCity(){
	defaultCity = -1;
	DWRUtil.removeAllOptions(selCity);
	DWRUtil.addOptions(selCity,cityHead);
}

/*
*  :Sivyer Email:[email protected]
*  :         
*  :name       country,state,city
*  :           ,     -1;
*/
function getSelectId( name ){
	var id;
	if(name == selCountry){
		id = DWRUtil.getValue(selCountry );
	}else if( name == selState ){
		id = DWRUtil.getValue(selState);
	
	}else if( name == selCity ){
		id = DWRUtil.getValue(selCity);
	}
	if(isNaN(id)){
		return -1;
		
	}else{
		return id;
	}
}

function setDefaultValue(sel,value){
	DWRUtil.setValue(sel,value);
}
//-->




dwr.xmlプロファイル

<!--        -->
         <create creator="spring" javascript="Address">
			<param name="beanName"
				value="addressBean" />
		</create>
		<convert match="com.mp.job.hibernate.vo.Country" javascript="Country" converter="bean"/>
		<convert match="com.mp.job.hibernate.vo.City" javascript="City" converter="bean"/>
		<convert match="com.mp.job.hibernate.vo.State" javascript="State" converter="bean"/>

サンプルjspファイル

<%
String basePath = request.getContextPath();
%>

<html>
	<head>
		<script type='text/javascript'
			src='<%=basePath%>/dwr/interface/Address.js'></script>
		<script type='text/javascript' src='<%=basePath%>/dwr/engine.js'></script>
		<script type='text/javascript' src='<%=basePath%>/dwr/util.js'></script>
		<script type="text/javascript" src="<%=basePath%>/js/day.js"></script>
		<script type='text/javascript' src='<%=basePath%>/js/address.js'></script>

 </head>
<body>
     :
   <select name="companyuser.countryId" id="selCountry"
	onchange="getStates()"	>
   </select>
           :       ,     initAddress()  
   <script type="text/javascript">
     defaultCountry = 1; //   ;
     defaultState = 1; //   ;
     defaultCity =  1; //   ;    -1
      initAddress();
   </script>
   <br/>  :
   <select name="companyuser.stateId" id="selState" onchange="getCities()">
   </select>
  <br/> :
  <select name="companyuser.cityId" id="selCity">

  </select>
</body>