您的位置:首页 > 编程语言 > Java开发

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

2016-03-30 22:41 519 查看
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,很好用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: