码迷,mamicode.com
首页 > Web开发 > 详细

struts2+jquery 实现ajax无刷新更新数据

时间:2015-09-28 11:58:20      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

前几天为了实现一个struts 的 ajax无刷新更新数据的例子,发现网上资料很少,很多已经过时或者链接都失效了

不过整合他们的资料,加上自己的研究,终于实现了效果

要求:1、各个学院提交学生数据到服务器,要求ajax 无刷新更新数据,

          2、服务器端返回“更新成功”的提示窗口;

          3、之后,使用jquery 更新input输入框的value值,为实现jquery 打印页面局部数据做准备。

此处使用struts2的第二种方法,(修改struts 配置文件,增加ajax package 的方式实现)

一、success.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@page import="org.apache.struts2.ServletActionContext"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@page import="qau.edu.entity.User"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>统计表</title>
<link href="images/style.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="js/jquery-1.8.2.js"></script>  //必须引入的jquery类库

</head>

<%
	if (ServletActionContext.getRequest().getSession()
			.getAttribute("user") == null) {
		out.print("<script>alert(‘请登录‘);location.href=‘index.jsp‘</script>");
	}
%>


<body>
	<div class="table">
		<br />

		<form action="#" method="post">
			<input type="hidden" id="tuser" name="tongji.user" value="user" />
			<div id="jsexport">
			<br /> 
			<p align="center">
				<font size="+2">汇总结果</font>
			</p>
			<br />			
			<table border="3" align="center">
				<tr>
					<th width="120" rowspan="2" scope="col">学院名称</th>
					<th width="86" rowspan="2" scope="col">学生总数</th>
					<th width="60" rowspan="2" scope="col">返校学生数</th>
					<th width="65" rowspan="2" scope="col">实习学生数</th>
					<th colspan="6" scope="col">未返校学生数</th>
					<th width="93" rowspan="2" scope="col">统计人签字</th>
					<th width="101" rowspan="2" scope="col">学工班主任签字</th>
				</tr>
				<tr>
					<td width="89">未购票/车次晚点</td>
					<td width="40">生病</td>
					<td width="50">家中有事</td>
					<td width="83">休学 /退学/ 转学</td>
					<td width="59">联系不上</td>
					<td width="63">未返校合计</td>
				</tr>

				<tr>
					<td style="text-align:center">${tongji.name}</td>
					<td><input type="number" id="stunum"
						style="border-style:none;width:90px" name="tongji.stunum"
						value="${tongji.stunum}" readonly="readonly" /></td>
					<td><input type="number" id="fxstu"
						style="border-style:none;width:90px" name="tongji.fxstu"
						value="${tongji.fxstu}" /></td>
					<td><input type="number" id="sxstu"
						style="border-style:none;width:90px" name="tongji.sxstu"
						value="${tongji.sxstu}" /></td>
					<td><input type="number" id="wgp"
						style="border-style:none;width:90px" name="tongji.wgp"
						value="${tongji.wgp}" /></td>
					<td><input type="number" id="shengbing"
						style="border-style:none;width:90px" name="tongji.shengbing"
						value="${tongji.shengbing}" /></td>
					<td><input type="number" id="youshi"
						style="border-style:none;width:90px" name="tongji.youshi"
						value="${tongji.youshi}" /></td>
					<td><input type="number" id="xtzx"
						style="border-style:none;width:90px" name="tongji.xtzx"
						value="${tongji.xtzx}" /></td>
					<td><input type="number" id="unconnect"
						style="border-style:none;width:90px" name="tongji.unconnect"
						value="${tongji.unconnect}" /></td>
					<td><input type="number" id="wfxtotal"
						style="border-style:none;width:90px" name="tongji.wfxtotal"
						value="${tongji.wfxtotal}" readonly="readonly" /></td>
					<td><input type="text" style="border-style:none;width:90px"
						name="tongji.tjr" value="${tongji.tjr}" readonly="readonly" /></td>
					<td><input type="text" style="border-style:none;width:90px"
						name="tongji.bzr" value="${tongji.bzr}" readonly="readonly" /></td>
				</tr>

			</table>
			
			</div>
			<br />
			<div style="margin:0 160px 0 0;float: right">
				<input type="button" class="btn" value="提交" style="width:50px;height:25px" />
			</div>
			<br /> <br />
		</form>
		<div style="width:960px;margin: 0 auto;">
			<p>
				<font size="+1">未返校合计人数不包括实习生数,返校生数+实习学生数+未返校学生数=学生总数</font>
			</p>
			<br />
		</div>
	</div>
	<script type="text/javascript">
		$(function() {
			//为返校统计
			var func = function() {
				var val = parseFloat($(‘#wgp‘).val())
						+ parseFloat($(‘#shengbing‘).val())
						+ parseFloat($(‘#youshi‘).val())
						+ parseFloat($(‘#xtzx‘).val())
						+ parseFloat($(‘#unconnect‘).val());
				$(‘#wfxtotal‘).val(val);
			};

			//自动改变输入框事件(未返校)
			$(‘#wgp,#shengbing,#youshi,#xtzx,#unconnect‘).change(func).keyup(
					func);
			//返校统计
			var sumzong = function() {
				var sumval = parseFloat($(‘#fxstu‘).val())
						+ parseFloat($(‘#sxstu‘).val())
						+ parseFloat($(‘#wfxtotal‘).val());
				$(‘#stunum‘).val(sumval);
			};
			$(
					‘#fxstu,#sxstu,#wfxtotal,#wgp,#shengbing,#youshi,#xtzx,#unconnect‘)
					.change(sumzong).keyup(sumzong);
		});
	</script>
	<script type="text/javascript">
		//JQuery防止退格键网页后退的实现代码
		$(document).keydown(
				function(e) {
					var doPrevent;
					if (e.keyCode == 8) {
						var d = e.srcElement || e.target;
						if (d.tagName.toUpperCase() == ‘INPUT‘
								|| d.tagName.toUpperCase() == ‘TEXTAREA‘) {
							doPrevent = d.readOnly || d.disabled;
						} else
							doPrevent = true;
					} else
						doPrevent = false;

					if (doPrevent)
						e.preventDefault();
				});
	</script>
	<script type="text/javascript">
        /* 提交结果,执行ajax */
        function btn(){
            var $btn = $("input.btn");//获取按钮元素
            
            //给按钮绑定点击事件
            $btn.bind("click",function(){
                $.ajax({
                    url:"saveCollegeAction",//saveCollegeAge  需要用来处理ajax请求的action,save为处理的方法名,CollegeAge为action名
                    type:"POST",
                    data:{//设置数据源
                    	stunum:$("#stunum").val(),
                    	fxstu:$("#fxstu").val(),//这里不要加","  不然会报错,而且根本不会提示错误地方
                    	sxstu:$("#sxstu").val(),
                    	wgp:$("#wgp").val(),
                    	shengbing:$("#shengbing").val(),
                    	youshi:$("#youshi").val(),
                    	xtzx:$("#xtzx").val(),
                    	unconnect:$("#unconnect").val(),
                    	wfxtotal:$("#wfxtotal").val()
                    },
                    dataType:"json",//设置需要返回的数据类型
                    success:function(data){
                        //得到的d是一个形如{"key":"value","key1":"value1"}的数据类型,然后取值出来
                    	alert("更新成功!");
                        var d = eval("("+data.result+")");
                        $("#stunum").attr("value",""+d.stunuma+"");
                        $("#fxstu").attr("value",""+d.fxstua+"");
                        $("#sxstu").attr("value",""+d.sxstua+"");
                        $("#wgp").attr("value",""+d.wgpa+"");
                        $("#shengbing").attr("value",""+d.shengbinga+"");
                        $("#youshi").attr("value",""+d.youshia+"");
                        $("#xtzx").attr("value",""+d.xtzxa+"");
                        $("#unconnect").attr("value",""+d.unconnecta+"");
                        $("#wfxtotal").attr("value",""+d.wfxtotala+"");
                        //$("#stunum").text(""+d.stunuma+"");
                        
                    },
                    error:function(data){
                        alert("系统异常,请稍后重试!");
                    }//这里不要加","
                });
            });
        }
        /* 页面加载完成,绑定事件 */
        $(document).ready(function(){          
            btn();//点击提交,执行ajax
        });

    </script>
</body>
</html>

二、action页面----CollegeAction.java

这个是struts 分层中接收页面数据,并提交到 Dao类操作数据库的中间层

使用字段的get/set方法接手页面传值

package XXX.AAA.action;

import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import XXX.AAA.dao.CollegeDao;
import XXX.AAA.entity.Tongji;

import com.opensymphony.xwork2.Action;


public class CollegeAction implements Action {
	private Tongji tongji;
	//result 属性是用来ajax 返回结果集的,需要get/set方法
	private String result;
	public int stunum;
	private int fxstu;
	private int sxstu;
	private int wgp;
	private int shengbing;
	private int youshi;
	private int xtzx;
	private int unconnect;
	private int wfxtotal;

	
	@Override
	public String execute() throws Exception {
		return getCollege();
	}

	public String getCollege() {
		CollegeDao collegeDao = new CollegeDao();
		tongji = collegeDao.getCollege();
		return "success";
	}
	//ajax 更新数据
	public String save() {
	        //创建map集合,获取ajax 数据
		Map mapp = new HashMap();
		mapp.put("stunuma",stunum);
		mapp.put("fxstua",fxstu);
		mapp.put("sxstua",sxstu);
		mapp.put("wgpa",wgp);
		mapp.put("shengbinga",shengbing);
		mapp.put("youshia",youshi);
		mapp.put("xtzxa",xtzx);
		mapp.put("unconnecta",unconnect);
		mapp.put("wfxtotala",wfxtotal);
		if(ServletActionContext.getRequest().getSession().getAttribute("user")==null){
			return "success";
		}
		CollegeDao collegeDao = new CollegeDao();
		if (collegeDao.save(mapp) != 0) {
			//tongji = collegeDao.getCollege();
			//将map 解析到jason,方便数据返回
			JSONObject json = JSONObject.fromObject(mapp);
			result = json.toString();
			//System.out.println(result);
			return "success";
		}else{
			return "calcerror";
		}
		
	}


	public Tongji getTongji() {
		return tongji;
	}

	public void setTongji(Tongji tongji) {
		this.tongji = tongji;
	}
	//ajax
	public int getFxstu() {
		return fxstu;
	}
	public void setFxstu(int fxstu) {
		this.fxstu = fxstu;
	}
	
	public int getSxstu() {
		return sxstu;
	}
	public void setSxstu(int sxstu) {
		this.sxstu = sxstu;
	}
	public int getWgp() {
		return wgp;
	}
	public void setWgp(int wgp) {
		this.wgp = wgp;
	}
	public int getShengbing() {
		return shengbing;
	}
	public void setShengbing(int shengbing) {
		this.shengbing = shengbing;
	}
	public int getYoushi() {
		return youshi;
	}
	public void setYoushi(int youshi) {
		this.youshi = youshi;
	}
	public int getXtzx() {
		return xtzx;
	}
	public void setXtzx(int xtzx) {
		this.xtzx = xtzx;
	}
	public int getUnconnect() {
		return unconnect;
	}
	public void setUnconnect(int unconnect) {
		this.unconnect = unconnect;
	}
	public int getWfxtotal() {
		return wfxtotal;
	}
	public void setWfxtotal(int wfxtotal) {
		this.wfxtotal = wfxtotal;
	}
	public int getStunum() {
		return stunum;
	}
	public void setStunum(int stunum) {
		this.stunum = stunum;
	}
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
	

}

对于数据解析成json,需要导入jar包,大家可以根据myecplise  控制台报的错,添加相应的jar包

下面列出所使用的jar包,应该很全了

struts核心包:

技术分享

json需要的包:

技术分享

三、dao页面----CollegeDao.java

操作数据库

public class CollegeDao extends BaseDao implements ParameterAware {
		
	 private HttpServletRequest request;

	public int save(Map mapp) {
		getConnection();
		int stunum = Integer.parseInt(mapp.get("stunuma").toString());
		int fxstu = Integer.parseInt(mapp.get("fxstua").toString());
		int sxstu = Integer.parseInt(mapp.get("sxstua").toString());
		int wgp = Integer.parseInt(mapp.get("wgpa").toString());
		int shengbing = Integer.parseInt(mapp.get("shengbinga").toString());
		int youshi = Integer.parseInt(mapp.get("youshia").toString());
		int xtzx = Integer.parseInt(mapp.get("xtzxa").toString());
		int unconnect = Integer.parseInt(mapp.get("unconnecta").toString());
		int wfxtotal = Integer.parseInt(mapp.get("wfxtotala").toString());
		//System.out.println(stunum);
		//System.out.println(fxstu);
		//System.out.println(sxstu);
		/*System.out.println(fxstu);
		System.out.println(stunum);
		System.out.println(stunum);
		System.out.println(stunum);
		System.out.println(stunum);*/
		if ((wgp + shengbing + youshi + xtzx + unconnect == wfxtotal)
				&& (fxstu + sxstu + wfxtotal == stunum)) {
			try {
				User user = (User) ActionContext.getContext().getSession()
						.get("user");
				pstm = conn
						.prepareStatement("update xy_tongji set stunum=?,fxstu=?,sxstu=?,"
								+ "wgp=?,shengbing=?,youshi=?,xtzx=?,unconnect=?, wfxtotal=?,"
								+ "tjr=?,bzr=? where nameid=?");
				pstm.setInt(1, stunum);
				pstm.setInt(2, fxstu);
				pstm.setInt(3, sxstu);
				pstm.setInt(4, wgp);
				pstm.setInt(5, shengbing);
				pstm.setInt(6, youshi);
				pstm.setInt(7, xtzx);
				pstm.setInt(8, unconnect);
				pstm.setInt(9, wfxtotal);
				pstm.setString(10, "");
				pstm.setString(11, "");
				pstm.setInt(12, user.getId());
				return pstm.executeUpdate();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return 0;
	}

	@Override
	public void setParameters(Map<String, String[]> arg0) {
		// TODO Auto-generated method stub
		
	}
}

到此,ajax 成功

struts2+jquery 实现ajax无刷新更新数据

标签:

原文地址:http://my.oschina.net/qau/blog/511791

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!