`

jquery通过struts2请求,返回json数据,在jsp页面形成二级联动下拉列表

    博客分类:
  • ajax
阅读更多
本文是要做一个二级联动,动态的。通过jquery返回json类型的数据,然后在jsp页面处理,生成第二级下拉列表菜单。
所需js库: jquery.js,json2.js
jar包:json-lib-2.2.3-jdk15.jar,ezmorph-1.0.6.jar

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="json2.js"></script>

<script type="text/javascript">
jQuery(function($){
var obj=$("#category");
if(typeof obj != 'undefined' && obj !=''){
	showGongdanType(obj.val());
}
});
function onchangeShow(category){
jQuery.ajax({
url : "${contextPath}/assets/statistic/ajaxGetType.do",
data : {statCategory : category},  // 传递参数
type : "post",
cache : false,
dataType : "json",
success:onchangecallback
});
}
function onchangecallback(data){ 
    document.all['type'].options.length = 0;
    var str="<option value=''>全部</option>";
    for(var i=0;i<data.length;i++){
		str+="<option value='"+data[i].value+"'>"+data[i].valueName+"</option>"
    }
    $("#type").html(str);
}
function showGongdanType(category){
jQuery.ajax({
url : "${contextPath}/assets/statistic/ajaxGetType.do",
data : {statCategory : category},
type : "post",
cache : false,
dataType : "json",
success:callback
});
}
function callback(data){ 
      document.all['type'].options.length = 0;
    var str="<option value=''>全部</option>";
    for(var i=0;i<data.length;i++){
     str+="<option value='"+data[i].value+"'>"+data[i].valueName+"</option>"
    }
    $("#type").html(str);
// 下面代码是为了第二级下拉列表的定位。因为非struts2的标签,无法自己定位
    if("${gongdanType}"!=''){
    	for(var i=0;i<data.length;i++){
    		if(data[i].value=="${gongdanType}")
    		document.all['type'].selectedIndex=i+1;
    	}
    }
}
</script>

			<td width="10%" height="25" class="alignLeft">
				统计类别:
			</td>
			<td width="10%" valign="top" class="alignLeft">
					<s:select name="form.category" list="categorys" id="category"
						listKey="value" listValue="valueName" 
						onchange="onchangeShow(this.value)">
					</s:select>
			</td>
			<td width="10%" height="25" class="alignLeft">
				工单类型:
			</td>
			<td width="10%" valign="top" class="alignLeft">
			 <select name="form.gongdanType" id="type" >
   			</select></td>



上面写了两个请求的函数,代码一样,只不过在第一级下拉列表onchange时,第二级下拉列表要定位在第一个值“全部”。


action
public class GongdanTypeStatAction extends ActionSupport implements Preparable {
	/** 统计类别:URL传参,默认统计类别是'CB' */
	private String type;
	/** 统计类别:(<s:select>标签list ) */
	private List<Param> categorys;
	/** 工单类型(第二级的数据) */
	private List<Param> gongdanTypes;
	/** ajax 传递的参数 统计类别 */
	private String statCategory;

	public void prepare() throws Exception {
		type = ServletActionContext.getRequest().getParameter("type");
		categorys = new ArrayList<Param>();
		Param param1 = new Param();
		param1.setValue("CB");
		param1.setValueName("业务变更");
		Param param2 = new Param();
		param2.setValue("APP");
		param2.setValueName("资源申请");
		categorys.add(param1);
		categorys.add(param2);
	}
	
	// 得到业务变更和资源申请下的变更类别
	public void ajaxGetType() throws Exception {
		// 工单类型
		if("CB".equals(statCategory)){
			gongdanTypes = new ArrayList<Param>();
			for(EChangeBusinessCategory ec:EChangeBusinessCategory.values()){
				Param param = new Param();
				param.setValue(ec.getKey());
				param.setValueName(ec.getLable());
				gongdanTypes.add(param);
			}
		}else if("APP".equals(statCategory)){
			gongdanTypes = new ArrayList<Param>();
			for (EApplyType et : EApplyType.values()) {
				Param param = new Param();
				param.setValue(et.getKey());
				param.setValueName(et.getName());
				gongdanTypes.add(param);
			}
		}
		JSONArray jsonObj = JSONArray.fromObject(gongdanTypes);
		sendMsg(jsonObj.toString());    //发送JSON格式的字符串回JS端    
	}
	
	public void sendMsg(String content) throws IOException{    
        HttpServletResponse response = ServletActionContext.getResponse();    
        response.setCharacterEncoding("UTF-8");    
        response.getWriter().write(content);    
    }  
}




Param.java
/**
 * 功能概述:<br>
 * 存储同一个类型的参数(类型名,类型值,和一条参数列表)
 */
public class Param {

	private Object entity;

	/** 参数的值 参数的业务唯一字段值 */
	private String value;

	/** 参数的名称. 参数的显示出来的 */
	private String valueName;

	public Param() {

	}

	/**
	 * @param value
	 * @param valueName
	 */
	public Param(String value, String valueName) {
		this.value = value;
		this.valueName = valueName;
	}

	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}

	/**
	 * @param value
	 *            the value to set
	 */
	public void setValue(String value) {
		this.value = value;
	}

	/**
	 * @return the valueName
	 */
	public String getValueName() {
		return valueName;
	}

	/**
	 * @param valueName
	 *            the valueName to set
	 */
	public void setValueName(String valueName) {
		this.valueName = valueName;
	}

	/**
	 * @return Returns the entity.
	 */
	public Object getEntity() {
		return entity;
	}

	/**
	 * @param entity
	 *            The entity to set.
	 */
	public void setEntity(Object entity) {
		this.entity = entity;
	}

}


两个枚举类型
EChangeBusinessCategory.java
EApplyType.java
public enum EChangeBusinessCategory {

	// 系统安装
	SYSTEM_SETUP("SYS", "系统安装"),
	// 监控需求
	MONITOR_DEMAND("MONI", "监控需求"),
	// 机柜需求
	CABINETS_DEMAND("CABI", "机柜需求"),
	
	// 撤销存储
	STORAGE_DEMAND("STOR","撤销存储"),
	// 网络需求
	NETWORK_DEMAND("NET", "网络需求");

	private String key;

	private String lable;


	EChangeBusinessCategory(String key, String value) {
		this.key = key;
		this.lable = value;
	}

	/**
	 * 将字符串转化为枚举值
	 * 
	 * @param key
	 * @return
	 */
	public static EChangeBusinessCategory getEnumType(String key) {
		EChangeBusinessCategory[] values = EChangeBusinessCategory.values();
		for (int i = 0; i < values.length; i++) {
			EChangeBusinessCategory eInfo = values[i];
			if (eInfo.getKey().equals(key)) {
				return eInfo;
			}
		}
		return null;
	}

	/**
	 * @return Returns the lable.
	 */
	public String getLable() {
		return lable;
	}

	/**
	 * @return Returns the key.
	 */
	public String getKey() {
		return key;
	}

}


public enum EApplyType {

	SERV("SERV", "服务器"),

	CABI("CABI", "机柜"),

	IP("IP", "IP"),

	STOR("STOR", "存储");

	private String key;

	private String name;

	/**
	 * @param key
	 * @param name
	 */
	EApplyType(String key, String name) {
		this.key = key;
		this.name = name;
	}

	/**
	 * @return Returns the key.
	 */
	public String getKey() {
		return key;
	}

	/**
	 * @return Returns the name.
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param roleId
	 * @return
	 */
	public static EApplyType getEnumType(String key) {
		EApplyType[] values = EApplyType.values();
		for (int i = 0; i < values.length; i++) {
			EApplyType eInfo = values[i];
			if (eInfo.getKey().equals(key)) {
				return eInfo;
			}
		}
		return null;
	}
}



action配置
		<action name="ajaxGetType" class="GongdanTypeStatAction" 
			method="ajaxGetType">
		</action>
分享到:
评论
6 楼 benjaminxiacc 2012-05-23  
引用
5 楼 benjaminxiacc 2012-05-23  
[flash=200,200][/flash]
[url][/url][img][/img]
引用
引用
[u][/u][/b][b]
引用
[img][/img][url][/url][flash=200,200][/flash][/url][url]
引用
引用
引用
引用
引用
4 楼 ppyeah123 2012-01-27  
请问为什么总是报这个错:
[tag 'select', field 'list', id 'category', name 'form.category': The requested list key 'categorys' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name}

这个categorys 怎么取到值呢?
action里get set 方法我也加了呀
3 楼 swbyzx 2011-11-28  
解决了困扰我已久的问题,谢谢了
2 楼 bushkarl 2010-08-20  
1 楼 hnzhangshi 2010-01-12  
很详细,谢谢了!

相关推荐

    联动(struts2+json+jquey)

    服务器接收到请求后,使用Struts2的Action处理业务逻辑,然后以JSON格式返回相关的二级选项数据。 在前端,jQuery接收到JSON数据后,可以解析这些数据并动态地更新第二级选择框的选项。这样,用户在第一级选择时,...

    ssh+jquery+ajax二级联动

    在二级联动中,可能有一个Action接收父级选项的选择,并通过Ajax返回子级选项的数据。 2. **Spring**:Spring框架用于管理Bean的生命周期和依赖关系。在本例中,可能有一个Service层来处理业务逻辑,如从数据库获取...

    Struts2 JQueryJson例子 .rar

    在这个压缩包的实例中,可能包含了一个简单的登录或注册页面,通过JQuery发送JSON请求到Struts2 Action,Action验证后返回JSON响应,JQuery再根据响应更新UI。具体实现细节可能涉及Action类、JSP页面、struts.xml...

    web小项目:省市区三级联动(struts2+json)

    在本项目中,Struts2可以集成JSON插件,使得Action可以直接返回JSON对象,前端JavaScript代码则可以解析这些JSON数据,动态更新下拉列表,实现三级联动效果。JSON对象通常包含省、市、区的ID和名称,前端根据这些...

    struts2+json省市区级联显示

    在"struts2+json省市区级联显示"这个项目中,我们看到主要功能是通过Struts2框架与JSON数据配合,实现在用户选择省份时,无需刷新页面就能动态加载并显示对应的市、区级联列表。这种级联选择通常用于地址填写或者...

    SSH1,JQuery的ajax返回json二维数组处理过程

    在本文中,我们将探讨如何使用SSH1框架与jQuery的AJAX功能来处理JSON二维数组,特别是在实现菜单联动下拉框的场景中。SSH1(Spring、Struts、Hibernate)是Java开发中的一个流行MVC框架组合,而jQuery的AJAX功能则...

    Java二级联动

    在Java二级联动中,AJAX可以用来在不刷新整个页面的情况下,向服务器发送请求获取数据,使得用户体验更加流畅。通过`XMLHttpRequest`对象或现代浏览器的`fetch` API,前端可以发送异步请求,控制器响应这些请求并...

    三级联动的实例+struts2+hibernate3

    在IT行业中,"三级联动"通常指的是在一个应用中,三个或更多下拉列表框之间存在联动关系,即一个下拉框的选择会影响到下一个下拉框的数据加载。这种技术常见于地域选择、产品分类等场景,提供了良好的用户体验。在这...

    struts+js,struts+jquery示例

    例如,可以创建一个使用JavaScript和jQuery的AJAX请求,当用户点击按钮时,向Struts Action发送请求,Action处理请求后返回结果,jQuery接收并更新页面上的特定元素。 jQuery库进一步简化了JavaScript在DOM操作、...

    ajax在struts2中的应用实例

    在Struts2框架中,我们可以通过集成Ajax来实现更动态和交互性的功能,例如在本实例中提到的省市县三级联动下拉列表。 首先,让我们了解三级联动下拉列表的工作原理。用户在选择一个省份时,对应的市会动态加载到第...

    ajax+json实现多级联动菜单

    - 通过JavaScript发送Ajax请求,并根据服务器返回的JSON数据更新页面上的内容。 #### 四、综合案例分析 ##### 1. **需求分析**:假设我们需要在一个电商网站上实现商品分类的多级联动菜单,即当用户选择一级分类...

    jquey配合josn实现两级菜单联动特效.rar

    这个菜单系统的工作原理是:当用户点击一级菜单项时,通过jQuery获取对应的JSON数据,然后动态生成相应的二级菜单。JSON文件通常会包含一级菜单和二级菜单的关联信息,例如: ```json { "menu": [ { "name": "一...

    jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动

    在Ajax请求的回调函数中,获得服务器返回的JSON格式数据,并通过遍历数据,将获取的用户信息填充到二级下拉菜单中。 在后端,使用Struts2框架创建一个Action类,该类提供了get和set方法以及一个处理业务逻辑的方法...

    struts2 级联菜单

    4. **配置Struts2**:在struts.xml配置文件中,为Action类的这两个方法分别配置一个结果,指定它们返回的视图(JSP页面或Freemarker模板)。同时,确保Action类已经正确地映射到URL路径。 5. **JSP页面**:创建JSP...

    struts实现下拉框多级联动

    5. **JSON数据交换**:在Ajax请求中,服务器端通常会返回JSON格式的数据,因为JSON易于解析且轻量级。Action类的方法返回一个包含选项的Map或List,然后通过Struts2的JSON插件将其转换为JSON字符串。 6. **Struts...

    struts2级联联动菜单

    - 在struts.xml配置文件中,为这些方法配置不同的结果类型,比如`json`,这样当用户触发这些方法时,Struts2会以JSON格式返回数据。 4. **JSP页面**: - 使用JavaScript和jQuery库创建级联下拉框,监听第一个...

    Struts2级联doubleselect

    8. **JSON数据交换格式**:在Ajax请求中,服务器端返回的数据通常以JSON格式,因为JSON轻量级且易于解析,适合在客户端和服务器之间传递数据。 9. ** strut2-plugin.xml配置**:Struts2的插件配置文件中,需要配置...

    当当网struts2

    - **JSON支持**:Struts2内置了对JSON的支持,允许Action直接返回JSON格式的数据,供jQuery进行异步请求处理,实现数据的动态更新。 - **AJAX提交**:利用Struts2的AJAX特性,可以创建无刷新的用户界面,提高交互...

    用Struts2+Spring+Hibernate三大框架完成的级联操作

    这种联动效果可以通过Ajax技术实现,Struts2支持Ajax请求,可以在前端页面上发送异步请求,获取并更新省市县或年月日的选项。Spring MVC的ModelAndView或Struts2的结果类型可以返回JSON数据,前端JavaScript可以解析...

    SSH结合jquery实现三级联动效果

    在JSP页面中,通过创建下拉列表(select标签)和绑定事件处理器(onchange="floor2()")来实现三级联动的前端部分。页面中的元素通过id与JavaScript代码中的DOM操作相对应。 6. JavaScript的联动逻辑: 在...

Global site tag (gtag.js) - Google Analytics