ajax中Json对象的使用(利用struts框架或者单独使用)

1、先看看不使用Struts框架的情况下json对象的传值(主要区别在action,jsp页面和javascript没变化)
a、导入相关jar
commons-beanutils-1.8.0.jar
ezmorph-1.0.6.jar
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.3.20.jar    //这个jar是struts的jar,不用框架时可以不导入。
b、action
	//以部门查询并返回json对象进行异步处理
	public void getUserJson(){
		try {
			//1、获取部门
			String dept = ServletActionContext.getRequest().getParameter("dept");
			if(StringUtils.isNotBlank(dept)){
				QueryHelper queryHelper = new QueryHelper(User.class,"u");
				queryHelper.addCondition("u.dept like ?", "%" + dept);
				//2、根据部门查询用户列表
				List<User> userList = userService.findObjects(queryHelper);
				//创建json对象
				JSONObject jso = new JSONObject();
				jso.put("msg", "success");
				jso.accumulate("userList", userList);
				//3、输出用户列表:以json格式字符串形式输出
				HttpServletResponse response = ServletActionContext.getResponse();
				response.setContentType("text/html");
				ServletOutputStream outputStream = response.getOutputStream();
				outputStream.write(jso.toString().getBytes("utf-8"));
				outputStream.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
2、使用Struts框架的情况下json对象的传值
a , action
private Map<String,Object> return_map;
       ......
public String getUserJson2(){
		try {
			//1、获取部门
			String dept = ServletActionContext.getRequest().getParameter("dept");
			if(StringUtils.isNotBlank(dept)){
				QueryHelper queryHelper = new QueryHelper(User.class,"u");
				queryHelper.addCondition("u.dept like ?", "%" + dept);
				//2、根据部门查询用户列表
				return_map = new HashMap<String,Object>();
				return_map.put("msg", "success");
				return_map.put("userList",userService.findObjects(queryHelper));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}
b , struts的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="sysHome-action" namespace="/sys" extends="base-default">
		<action name="home_*" class="cn.buaa.home.action.HomeAction"
			method="{1}">
			<result name="{1}">/WEB-INF/jsp/home/{1}.jsp</result>
			<result name="home">/WEB-INF/jsp/home/home.jsp</result>
		</action>
	</package>
	
	<package name="sysHomeJson-action" namespace="/sys" extends="json-default">
	<action name="home_getUserJson2" class="cn.buaa.home.action.HomeAction"
		method="getUserJson2">
		<result type="json">
			<param name="root">return_map</param>
		</result>
	</action>
</package>
</struts>
3、jsp中异步处理
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    pageContext.setAttribute("basePath", request.getContextPath()+"/") ;
%>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>我要投诉</title>
    
    <script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/ueditor.config.js"></script>
	<script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/ueditor.all.min.js">
	
	</script>
		<!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败-->
		<!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文-->
	<script type="text/javascript" charset="utf-8" src="${basePath }js/ueditor/lang/zh-cn/zh-cn.js"></script>
<script>
		window.UEDITOR_HOME_URL = "${basePath }js/ueditor/";
		var ue = UE.getEditor('editor');
		
		//根据部门查询该部门下的查询列表
		function doSelectDept(){
			//1、获取部门
			var dept = $("#toCompDept option:selected").val();
			if(dept != ""){
				//2、根据部门查询列表
				$.ajax({
					url:"${basePath}sys/home_getUserJson2.action",
					data:{"dept":dept},
					type:"post",
					dataType:"json", //返回数值类型为json
					success:function(data){
						//2.1、将用户列表设置到被投诉人下拉列表中
						if(data != null && data != "" && data != undefined){
							if("success" == data.msg){
								var toCompName = $("#toCompName");
								toCompName.empty();
								$.each(data.userList,function(index,user){
									toCompName.append("<option value='"+ user.name +"'>" + user.name+ "</option>");
								});
							}else{
								alert("获取被投诉人列表失败!");
								}
						}else{
							alert("获取被投诉人列表失败!");
						}
					},
					error:function(){
						alert("获取被投诉人列表失败!");
					}
				});
			}else{
				//清空被投诉人列表下拉框
				$("#toCompName").empty();
			}
		}
</script>
</head>
<body>
<form id="form" name="form" action="" method="post" enctype="multipart/form-data">
    <div class="vp_d_1">
        <div style="width:1%;float:left;">    </div>
        <div class="vp_d_1_1">
            <div class="content_info">
    <div class="c_crumbs"><div><b></b><strong>工作主页</strong> - 我要投诉</div></div>
    <div class="tableH2">我要投诉</div>
    <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0"  >
        <tr>
            <td class="tdBg" width="250px">投诉标题:</td>
            <td><s:textfield name="comp.compTitle"/></td>
        </tr>
        <tr>
            <td class="tdBg">被投诉人部门:</td>
            <td>
            	<s:select id="toCompDept" name="user.dept" list="#{'':'请选择','部门A':'部门A','部门B':'部门B'}" onchange="doSelectDept()"/>
            </td>
        </tr>
        <tr>
            <td class="tdBg">被投诉人姓名:</td>
            <td>
            	<select id="toCompName" name="comp.toCompName">
            		
            	</select>
            </td>
        </tr>
        <tr>
            <td class="tdBg">投诉内容:</td>
            <td><s:textarea id="editor" name="comp.compContent" cssStyle="width:90%;height:160px;" /></td>
        </tr>
        <tr>
            <td class="tdBg">是否匿名投诉:</td>
            <td><s:radio name="comp.isNm" list="#{'0':'非匿名投诉','1':'匿名投诉' }" value="0"/></td>
        </tr>
       
    </table>

    <div class="tc mt20">
        <input type="button" class="btnB2" value="保存" />
            
        <input type="button"  onclick="javascript:window.close()" class="btnB2" value="关闭" />
    </div>
    </div></div>
    <div style="width:1%;float:left;">    </div>
    </div>
</form>
</body>
</html>

4、关于json,很容易传错值,有个工具HiJson,很好用。

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *