• Struts2+Jquery实现ajax并返回json类型数据


    Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下:
    1、JSP页面使用脚本代码执行ajax请求
    2、Action中查询出需要返回的数据,并转换为json类型模式数据
    3、配置struts.xml文件
    4、页面脚本接受并处理数据 

    网上看到很多关于Struts2+ajax+jquery+json的例子,但是很多都不完整,也看不明白,主要原因是返回jsno类型数据和原来的返回字符串类型数据不一样,并且网友们实现步骤没有说清楚,让初学的朋友捉摸不透到底该怎么做。

    首先需要的包(struts核心包和json需要的包):

    struts核心包:

    Struts2+Jquery实现ajax并返回json类型数据

    json需要的包:

    Struts2+Jquery实现ajax并返回json类型数据

    这里主要是struts2-json-plugin-2.x.x.x.jar,我放在了WEB-INF的lib下了。

    页面效果:

    Struts2+Jquery实现ajax并返回json类型数据

    json_demo.jsp页面(该页面引用了jquery文件,我用的版本是jquery-1.8.2.js,如果使用版本不同,请自行修改):

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Simpleton Demo | struts+ajax返回json类型数据</title>
    
    <link rel="shortcut icon" type="image/x-icon" href="images/Icon.png" />
    <link rel="stylesheet" type="text/css" href="styles/base.css" />
    
    </head>
    <body background="images/bg.gif">
    	
    	<div id="div_json">
    		<h5>录入数据</h5>
    		<br />
    		<form action="#" method="post">
    			<label for="name">姓名:</label><input type="text" name="name" />
    			<label for="age">年龄:</label><input type="text" name="age" />
    			<label for="position">职务:</label><input type="text" name="position" />
    			<input type="button" class="btn" value="提交结果"/>
    		</form>
    		<br />
    		<h5>显示结果</h5>
    		<br />
    		<ul>
    			<li>姓名:<span id="s_name">赞无数据</span></li>
    			<li class="li_layout">年龄:<span id="s_age">暂无数据</span></li>
    			<li class="li_layout">职务:<span id="s_position">暂无数据</span></li>
    		</ul>
    	</div>
    	
    	<div id="authorgraph"><img alt="" src="images/autograph.gif"></div>
    	
    	<script type="text/javascript" src="scripts/jquery-1.8.2.js"></script>
    	<script type="text/javascript">
    		
    		/* 提交结果,执行ajax */
    		function btn(){
    			
    			var $btn = $("input.btn");//获取按钮元素
    			//给按钮绑定点击事件
    			$btn.bind("click",function(){
    				
    				$.ajax({
    					type:"post",
    					url:"excuteAjaxJsonAction",//需要用来处理ajax请求的action,excuteAjax为处理的方法名,JsonAction为action名
    					data:{//设置数据源
    						name:$("input[name=name]").val(),
    						age:$("input[name=age]").val(),
    						position:$("input[name=position]").val()//这里不要加","  不然会报错,而且根本不会提示错误地方
    					},
    					dataType:"json",//设置需要返回的数据类型
    					success:function(data){
    						var d = eval("("+data+")");//将数据转换成json类型,可以把data用alert()输出出来看看到底是什么样的结构
    						//得到的d是一个形如{"key":"value","key1":"value1"}的数据类型,然后取值出来
    						
    						$("#s_name").text(""+d.name+"");
    						$("#s_age").text(""+d.age+"");
    						$("#s_position").text(""+d.position+"");
    						
    					},
    					error:function(){
    						alert("系统异常,请稍后重试!");
    					}//这里不要加","
    				});
    			});
    		}
    	
    		/* 页面加载完成,绑定事件 */
    		$(document).ready(function(){			
    			btn();//点击提交,执行ajax
    		});
    	</script>
    </body>
    </html>

    JsonAction.java代码

    package com.simpleton.demo.action;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import net.sf.json.JSONObject;
    
    import org.apache.struts2.interceptor.ServletRequestAware;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class JsonAction extends ActionSupport implements ServletRequestAware{
    	private static final long serialVersionUID = 1L;
    	
    	private HttpServletRequest request;
    	private String result;
    
    	public void setServletRequest(HttpServletRequest arg0) {
    		this.request = arg0;
    	}
    	public String getResult() {
    		return result;
    	}
    	public void setResult(String result) {
    		this.result = result;
    	}
    	
    	/**
    	 * 处理ajax请求
    	 * @return SUCCESS
    	 */
    	public String excuteAjax(){
    		
    		try {
    			//获取数据
    			String name = request.getParameter("name");
    			int age = Integer.parseInt(request.getParameter("age")); 
    			String position = request.getParameter("position");
    			
    			//将数据存储在map里,再转换成json类型数据,也可以自己手动构造json类型数据
    			Map<String,Object> map = new HashMap<String,Object>();
    			map.put("name", name);
    			map.put("age",age);
    			map.put("position", position);
    			
    			JSONObject json = JSONObject.fromObject(map);//将map对象转换成json类型数据
    			result = json.toString();//给result赋值,传递给页面
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return SUCCESS;
    	}
    
    
    	
    }

    struts.xml中

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    	
    	<!--解决乱码    -->
    	<constant name="struts.i18n.encoding" value="UTF-8"></constant> 
    	
    	<package name="simpleton" extends="struts-default,json-default">
    		
    		<action name="*JsonAction" method="{1}" class="com.simpleton.demo.action.JsonAction">
    			<result name="fail"></result>
    			<!-- 返回json类型数据 -->
    			<result type="json">
    				<param name="root">result<!-- result是action中设置的变量名,也是页面需要返回的数据,该变量必须有setter和getter方法 --></param>
    			</result>
    		</action>
    		
    	</package>
    	
    </struts>    

    这样就可以完成一个简单json数据类型传递的demo了。

  • 相关阅读:
    cf 1179 C
    P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap
    bzoj4605: 崂山白花蛇草水 权值线段树套KDtree
    luoguP4173 残缺的字符串 FFT
    [HNOI2016]序列 CDQ+DP
    [TJOI2017]不勤劳的图书管理员
    loj2058 「TJOI / HEOI2016」求和 NTT
    bzoj4503: 两个串
    luoguP4721 【模板】分治 FFT
    [Cqoi2016]K远点对 K-Dtree
  • 原文地址:https://www.cnblogs.com/limeiky/p/5351997.html
Copyright © 2020-2023  润新知