本文是要做一个二级联动,动态的。通过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>
分享到:
相关推荐
服务器接收到请求后,使用Struts2的Action处理业务逻辑,然后以JSON格式返回相关的二级选项数据。 在前端,jQuery接收到JSON数据后,可以解析这些数据并动态地更新第二级选择框的选项。这样,用户在第一级选择时,...
在二级联动中,可能有一个Action接收父级选项的选择,并通过Ajax返回子级选项的数据。 2. **Spring**:Spring框架用于管理Bean的生命周期和依赖关系。在本例中,可能有一个Service层来处理业务逻辑,如从数据库获取...
在这个压缩包的实例中,可能包含了一个简单的登录或注册页面,通过JQuery发送JSON请求到Struts2 Action,Action验证后返回JSON响应,JQuery再根据响应更新UI。具体实现细节可能涉及Action类、JSP页面、struts.xml...
在本项目中,Struts2可以集成JSON插件,使得Action可以直接返回JSON对象,前端JavaScript代码则可以解析这些JSON数据,动态更新下拉列表,实现三级联动效果。JSON对象通常包含省、市、区的ID和名称,前端根据这些...
在"struts2+json省市区级联显示"这个项目中,我们看到主要功能是通过Struts2框架与JSON数据配合,实现在用户选择省份时,无需刷新页面就能动态加载并显示对应的市、区级联列表。这种级联选择通常用于地址填写或者...
在本文中,我们将探讨如何使用SSH1框架与jQuery的AJAX功能来处理JSON二维数组,特别是在实现菜单联动下拉框的场景中。SSH1(Spring、Struts、Hibernate)是Java开发中的一个流行MVC框架组合,而jQuery的AJAX功能则...
在Java二级联动中,AJAX可以用来在不刷新整个页面的情况下,向服务器发送请求获取数据,使得用户体验更加流畅。通过`XMLHttpRequest`对象或现代浏览器的`fetch` API,前端可以发送异步请求,控制器响应这些请求并...
在IT行业中,"三级联动"通常指的是在一个应用中,三个或更多下拉列表框之间存在联动关系,即一个下拉框的选择会影响到下一个下拉框的数据加载。这种技术常见于地域选择、产品分类等场景,提供了良好的用户体验。在这...
例如,可以创建一个使用JavaScript和jQuery的AJAX请求,当用户点击按钮时,向Struts Action发送请求,Action处理请求后返回结果,jQuery接收并更新页面上的特定元素。 jQuery库进一步简化了JavaScript在DOM操作、...
在Struts2框架中,我们可以通过集成Ajax来实现更动态和交互性的功能,例如在本实例中提到的省市县三级联动下拉列表。 首先,让我们了解三级联动下拉列表的工作原理。用户在选择一个省份时,对应的市会动态加载到第...
- 通过JavaScript发送Ajax请求,并根据服务器返回的JSON数据更新页面上的内容。 #### 四、综合案例分析 ##### 1. **需求分析**:假设我们需要在一个电商网站上实现商品分类的多级联动菜单,即当用户选择一级分类...
这个菜单系统的工作原理是:当用户点击一级菜单项时,通过jQuery获取对应的JSON数据,然后动态生成相应的二级菜单。JSON文件通常会包含一级菜单和二级菜单的关联信息,例如: ```json { "menu": [ { "name": "一...
在Ajax请求的回调函数中,获得服务器返回的JSON格式数据,并通过遍历数据,将获取的用户信息填充到二级下拉菜单中。 在后端,使用Struts2框架创建一个Action类,该类提供了get和set方法以及一个处理业务逻辑的方法...
4. **配置Struts2**:在struts.xml配置文件中,为Action类的这两个方法分别配置一个结果,指定它们返回的视图(JSP页面或Freemarker模板)。同时,确保Action类已经正确地映射到URL路径。 5. **JSP页面**:创建JSP...
5. **JSON数据交换**:在Ajax请求中,服务器端通常会返回JSON格式的数据,因为JSON易于解析且轻量级。Action类的方法返回一个包含选项的Map或List,然后通过Struts2的JSON插件将其转换为JSON字符串。 6. **Struts...
- 在struts.xml配置文件中,为这些方法配置不同的结果类型,比如`json`,这样当用户触发这些方法时,Struts2会以JSON格式返回数据。 4. **JSP页面**: - 使用JavaScript和jQuery库创建级联下拉框,监听第一个...
8. **JSON数据交换格式**:在Ajax请求中,服务器端返回的数据通常以JSON格式,因为JSON轻量级且易于解析,适合在客户端和服务器之间传递数据。 9. ** strut2-plugin.xml配置**:Struts2的插件配置文件中,需要配置...
- **JSON支持**:Struts2内置了对JSON的支持,允许Action直接返回JSON格式的数据,供jQuery进行异步请求处理,实现数据的动态更新。 - **AJAX提交**:利用Struts2的AJAX特性,可以创建无刷新的用户界面,提高交互...
这种联动效果可以通过Ajax技术实现,Struts2支持Ajax请求,可以在前端页面上发送异步请求,获取并更新省市县或年月日的选项。Spring MVC的ModelAndView或Struts2的结果类型可以返回JSON数据,前端JavaScript可以解析...
在JSP页面中,通过创建下拉列表(select标签)和绑定事件处理器(onchange="floor2()")来实现三级联动的前端部分。页面中的元素通过id与JavaScript代码中的DOM操作相对应。 6. JavaScript的联动逻辑: 在...