DWR ajax国家地区カスケードメニュー作成
JAvaファイルの内容:
jsファイル内容
dwr.xmlプロファイル
サンプルjspファイル
/**
*
*/
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>