作者:懿切瀡纟彖_639 | 来源:互联网 | 2024-12-01 15:03
本文介绍了在处理财务凭证查询时,如何实现从插入或修改页面返回至原始查询结果页面,并确保数据保持最新状态的方法。通过使用JavaScript和Java的Session管理技术,解决了动态页面中AJAX调用失效的问题。
在进行财务凭证管理时,一个常见的需求是从查询结果页面跳转到插入或修改页面,完成操作后再返回到查询结果页面,同时保证页面上的数据是最新的。传统做法通常是使用AJAX异步请求来实现这一功能,但在某些情况下,由于页面是动态生成的,直接使用AJAX可能无法达到预期效果。
为了解决这个问题,我们可以采用以下步骤:
1. 插入操作的URL设置 当用户从查询页面跳转到插入页面时,在URL中添加一个特定的状态标识符(如status),以便区分不同的操作类型。例如:
// 插入功能 function insertBtn(date, pz_num) { var token = $("#token").val(); var AccountID = account_id; var linkurl = "../../finance/voucher/voucheradd.jsp?token=" + token + '&cdate=' + date + '&pz_num=' + pz_num + "&AccountID=" + account_id + '&action=insert' + "&state=1"; $.ajax({ url: 'voucherchecklist_saveSession.zm', type: "POST", dataType: 'json', data: { startperiod: _startperiod, endperiod: _endperiod, kmcodename: _kmcodename, summ: _summ, accountName: _accountName, startNum: _startNum, endNum: _endNum, kmcode: _kmcode, accountID: _accountID }, success: function (data) { if (data != null) { window.location.href = linkurl + "&status=1"; } } }); }2. 使用Session保存查询条件 由于URL和COOKIE的长度限制,不适合存储大量数据。因此,可以将查询条件保存在Session中,以备后续使用。例如:
// 将查询列表的信息保存到Session中 public void saveSession() { HttpSession session = request.getSession(); String _startperiod = request.getParameter("startperiod"); String _endperiod = request.getParameter("endperiod"); String _kmcodename = request.getParameter("kmcodename"); String _summ = request.getParameter("summ"); String _accountName = request.getParameter("accountName"); String _startNum = request.getParameter("startNum"); String _endNum = request.getParameter("endNum"); String _kmcode = request.getParameter("kmcode"); String _accountID = request.getParameter("accountID"); session.setAttribute("voucherchecklist_urlSession", "startperiod=" + _startperiod + ":endperiod=" + _endperiod + ":kmcodename=" + _kmcodename + ":summ=" + _summ + ":accountName=" + _accountName + ":startNum=" + _startNum + ":endNum=" + _endNum + ":kmcode=" + _kmcode + ":accountID=" + _accountID); JSONObject resJson = new JSONObject(); resJson.put("name", "zhangsan"); this.returnAjax(resJson.toString()); }3. 获取状态标识符 在插入或修改页面加载时,从URL中获取状态标识符,并将其设置为请求属性,以便在页面中使用。例如:
String status = request.getParameter("status"); request.setAttribute("status", status);4. 控制返回按钮的显示 根据状态标识符决定是否显示返回按钮。如果存在状态标识符,则显示返回按钮。例如:
返回 5. 实现返回按钮的功能 当用户点击返回按钮时,触发返回操作,重定向到查询结果页面。例如:
/* 返回按钮:返回路径拼接的url */ function backBut() { if (status != null) { window.location.href = "../../finance/voucher/voucherchecklist.jsp?token=" + token + "&AccountID=" + $AccountID + "&state=1"; } }6. 处理返回操作 在查询结果页面加载时,检查URL中的state参数。如果存在该参数,从Session中获取查询条件并显示数据。例如:
<% // 从URL路径中获取state参数 String state = request.getParameter("state"); HttpSession mySession = request.getSession(); // 如果state参数不为空,获取对应的session,分成数组 String voucherchecklist_urlSession = ""; if (state != null && state.equals("1")) { voucherchecklist_urlSession = (String) mySession.getAttribute("voucherchecklist_urlSession"); } %>7. 显示最新的查询结果 如果用户是从插入或修改页面返回的,则从Session中获取查询条件,并调用相应的函数显示最新的数据。例如:
var ss = $("#voucherchecklist_urlSession").val(); if (ss != null && ss != "") { var arrSession = ss.split(":"); var startperiodArr = arrSession[0].split("="); var endperiodArr = arrSession[1].split("="); var kmcodenameArr = arrSession[2].split("="); var summArr = arrSession[3].split("="); var accountNameArr = arrSession[4].split("="); var startNumArr = arrSession[5].split("="); var endNumArr = arrSession[6].split("="); var kmcodeArr = arrSession[7].split("="); var accountIDArr = arrSession[8].split("="); searchData(startperiodArr[1], endperiodArr[1], kmcodenameArr[1], summArr[1], accountNameArr[1], startNumArr[1], endNumArr[1], kmcodeArr[1], accountIDArr[1]); }通过以上步骤,我们可以在动态生成的页面中实现从插入或修改页面返回查询结果页面,并确保数据是最新的。这不仅提高了用户体验,也增强了系统的灵活性和可靠性。
小结:在开发过程中,理解不同技术之间的交互是非常重要的。本案例中,通过合理利用Javascript、Java和JSP的技术特点,解决了动态页面中数据同步的问题。未来的工作中,还需不断学习和实践,提高技术水平。