ajax 省市区多级联动(在struts2中),有人能做出个简单的吗??

2025-01-03 08:11:54
推荐回答(5个)
回答1:

一、实现思路
1.获取省份的列表值,有2种方式:一是返回List集合,在页面进行迭代;二是在业务类中将下拉列表封装好,页面通过JQuery方法写入。
这里暂时采用第二种方法。

2.前台JQuery:①数据库里面需要存的值,三者都有可能,三选一(判断是否选中了下面的级联项,按选中的最低级项为准值);
②将三个下拉框的name属性设置为变量,便于动态设置;③当修改重定位时,因为数据库中只有一个地区编号,所以需要根据地区编号将所在地区给定位。
定位方法:通过判断所在地区的编号后面的零,如果是四个0结束即为省,二个0即为市,都符合为区县。

3.调用方法:①jsp页面上引用include/js/cascadeCity.js;②调用返回省列表的方法provinceOption(操作类型, 省份编号, 城市编号, 区县编号);
③修改实体类(该实体类即你要修改的那个实体类),在实体类中添加private String provinceNum;private String cityNum;private String countyNum;
及对应的get、set方法(添加实体类中变量可自定义),添加的这3个变量主要用于修改时定位用户已选城市地区。

二、实现
1.cascadeCity.js
/*
* subType - 操作类型
* pNum - 省份编号
* cityNum - 城市编号
* countyNum - 区县编号
*

*/

function provinceOption(subType, pNum, cityNum, countyNum) {

$.ajax({

type: "POST",

url: "jsonCityAction!provincesInfo.action",

dataType:"text",

success: function(json){

var obj = $.parseJSON(json);

$("#province").html('' + obj.gS_Result);

if(subType == "modify") {

//给省份进行下拉框定位

$('#province option[value=' + pNum + ']').attr('selected', 'selected');

}
getCity(subType, pNum, cityNum, countyNum);

},

error: function(json){

alert("json=" + json);

return false;

}

});

}

//改变省份时触发

function changeProvince() {
//当操作id为province的下拉框时,触发事件
$("#province").change(function() {
var province_value = $("select[id='province'][@selected]").val();
getCity(operateType, province_value);
});
}

function getparmscity(){
var province_value = $("select[id='province'][@selected]").val();
getCity(operateType, province_value);
}
//改变城市时触发

function changeCity() {
//当操作id为city的下拉框时,触发事件
$("#city").change(function() {
var city_value = $("select[id='city'][@selected]").val();
getCounty(operateType, city_value);
});
}

//返回城市列表

function getCity(subType, pNum, cityNum, countyNum) {

$.ajax({

type: "POST",

url: "jsonCityAction!cityInfo.action?gS_PNum=" + pNum,

dataType:"text",

success: function(json){

var obj = $.parseJSON(json);

$("#city").html('' + obj.gS_Result);
if(subType == "modify") {
//给城市定位
$('#city option[value="' + cityNum + '"]').attr('selected',true);
}

getCounty(subType, cityNum, countyNum);

},

error: function(json){

alert("json=" + json);

return false;

}

});

}

//返回区县列表

function getCounty(subType, cityNum, countyNum) {

$.ajax({
type: "POST",
url: "jsonCityAction!countiesInfo.action?gS_CityNum=" + cityNum,
dataType:"text",
success: function(json){
var obj = $.parseJSON(json);
$("#county").html('' + obj.gS_Result);
if(subType == "modify") {
//给区县定位
$('#county option[value="' + countyNum + '"]').attr('selected',true);
}
},
error: function(json){
alert("json=" + json);
return false;
}
});
}

2.jsp页面:
……
引入js



…………

所属地区:














3.struts.xml





4.action类

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.ideamov.service.city.CityService;
import com.opensymphony.xwork2.ActionSupport;

@Component(value = "iCityAction")
public class CityAction extends ActionSupport {

private static final long serialVersionUID = -3234677100675620024L;
private CityService iCityService;
private String gS_PNum; //省份编号
private String gS_CityNum; //城市编号
private String gS_Result; //返回数据

public String provincesInfo() throws Exception {
gS_Result = iCityService.getProvincesInfo();
return SUCCESS;
}

public String cityInfo() throws Exception {
gS_Result = iCityService.getCityInfo(gS_PNum);
return SUCCESS;
}

public String countiesInfo() throws Exception {
gS_Result = iCityService.getCountiesInfo(gS_CityNum);
return SUCCESS;
}

/***=====set、get=====***/
public String getgS_Result() {
return gS_Result;
}
public String getgS_PNum() {
return gS_PNum;
}
public void setgS_PNum(String gSPNum) {
gS_PNum = gSPNum;
}
public String getGS_CityNum() {
return gS_CityNum;
}
public void setGS_CityNum(String cityNum) {
gS_CityNum = cityNum;
}
@Resource
public void setCityService(CityService iCityService) {
this.iCityService = iCityService;
}

}

5.业务层和dao层就是配合来完成数据库查询
/**
*
* 方法名: getProvincesInfo
* 方法描述: 获取省份的列表值
* 参数: @return
* 返回值:
* 异常:
*
*/
@Override
public String getProvincesInfo() {
StringBuffer sb_Provinces = new StringBuffer();
List tcPPList = iTcPPDao.findAll(TcPublicProvinces.class, "orderNum", true, new Criterion[]{Restrictions.isNotNull("num")});
for(TcPublicProvinces tcPP : tcPPList) {
sb_Provinces.append("");
}
return sb_Provinces.toString();
}

/**
*
* 方法名: getCityInfo
* 方法描述: 通过省份编号,获取到城市列表
* 参数: @param pNum - 省份编号
* 参数: @return
* 返回值:
* 异常:
*
*/
@Override
public String getCityInfo(String pNum) {
StringBuffer sb_City = new StringBuffer();
List tcPCList = iTcPCDao.findAll(TcPublicCity.class, "orderNum", true, new Criterion[]{Restrictions.eq("remark", pNum)});
for(TcPublicCity tcPC : tcPCList) {
sb_City.append("");
}
return sb_City.toString();
}

/**
*
* 方法名: getCountyInfo
* 方法描述: 根据城市编号,获取到区县列表的值
* 参数: @param cityNum - 城市编号
* 参数: @return
* 返回值:
* 异常:
*
*/
@Override
public String getCountiesInfo(String cityNum) {
StringBuffer sb_Countys = new StringBuffer();
List tcPCsList = iTcPCsDao.findAll(TcPublicCounties.class, "orderNum", true, new Criterion[]{Restrictions.eq("remark", cityNum)});
for(TcPublicCounties tcPCs : tcPCsList) {
sb_Countys.append("");
}
return sb_Countys.toString();
}

PS:有问题可留蔻蔻,我加你!~good luck!~

回答2:

直接保存成html就能运行 cs数据不全 太长了 不让发

























回答3:

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>




PPS需求管理系统










个人申请监控点列表>>个人监控点申请













































业务类名称:

 
业务模块名称:

监控点ID:
precision="0" required="true"
missingMessage="监控ID是必填内容,只能是数字" class="easyui-numberbox">

监控点名称:

逻辑主机号:

故障类型:

故障通知级别:

业务监控组:

业务运维组:

预警次数 :

检测间隔:
s
接口负责人:

接口功能:



  







我写的一个列子。 你可以看看 我想具体的通过ID查数据你还是会吧! 不动再问! 我天天在线

回答4:

多级联动实现:





来自:
请输入您所在国家的具体地方。此项可选
省份  城市
我在  不能超过12个字符(6个汉字)

回答5:

我也来插一嘴:
用ajax的dwr实现应该也可以吧?
在页面初始化的时候就把省份填好,然后调用市,区的onclick事件,将这些输入放到select中