1:由于针对特定的前后台交互用到的知识总结,所以不大量贴代码,主要给出思路,方便自己以后脑补和技术总结,当然也希望可以帮助到别人。

后台Json和其他格式转化,之前总结过Json和对象,集合,字符串的转化或者互相转化,这里我想网上有很多demo。

servlet,或者strtus2或者SpringMvc,在控制层将传递到前台的数据进行封装或者转化为Json,对你的开发十分有帮助。

  案例一:当前台申请或者取消按钮的时候,前台根据操作显示对应的提示,非弹出框。

(1):此处使用SpringMvc作为Controller层。

 @RequestMapping(value="/applyRights")
protected void applyRights(final HttpServletRequest request, final HttpServletResponse response) throws Exception{ ...操作
...操作
...操作
...操作
Map<String,Object> map = new HashMap<String,Object>();
//这里将前台的两种操作返回的数据分别,保存到map里面。
map.put("返回的数据1", 返回的数据1);
map.put("返回的数据2", 返回的数据2);
//然后使用JsonUtil,这个封装好的Json转化工具类,将map类型转化为Json类型的。Java的map集合类型转化为Json类型。
String json = JOSNUtil.object2String(map);
//将转化后的数据传递给前台的Ajax的function(data){}的data.
response.getWriter().write(json);
//刷新操作
response.getWriter().flush();

(2):前台使用Jquery进行后台数据处理:Jquery速查网址

 function 方法名称(参数){
...操作
...操作
...操作
//$.post的用法自行查阅
$.post(
url:发送请求地址,
data:待发送 Key/value 参数,
function(data){
//alert(data);//可以打印传过来的参数
//解析后台传过来的map转成的json格式的字符,Java的map集合类型转化为Json类型。
//eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
var json = eval("(" + data + ")");
//直接使用json.key的形式进行获取
if(json.返回的数据1!=null){
//js循环遍历返回的值,注我的map的value是数组类型的(Object)。
for(var i=;i< json.返回的数据1.length;i++){
//获取到这个id是为了动态根据某一个角色id来追加内容。
var roleId = json.返回的数据1[i];
//动态根据某一个角色id来追加内容。"#"+roleId代表选择器动态变化。
$("#"+roleId).append('<span style="color:red;">(申请权限待审批)</span>');
//此句话的,查找每个动态id元素的所有类名为 "selected" 的所有同胞元素:
//然后attr() 方法设置或返回被选元素的属性值。
//然后设置一下checkbox为不选中,且disabled不可选。
$("#"+roleId).siblings().attr("checked",false).attr("disabled",true);
}
}
//同上
if(json.返回的数据2!=null){
for(var i=;i< json.返回的数据2.length;i++){
var roleId= json.返回的数据2[i]
$("#"+roleId).append('<span style="color:red;">(申请注销待审批)</span>');
$("#"+roleId).siblings().attr("checked",false).attr("disabled",true);
}
}
}); }

  案例二:根据id动态变化传递到后台,ajax异步请求,刷新前台显示内容。

(1):此处使用SpringMvc作为Controller层。

 //根据角色id获取资源信息/index/getResource
//@ResponseBody将返回值转化为json格式响应到客户端
@RequestMapping(value="/getResource",method=RequestMethod.POST)
public @ResponseBody List<Object> roleGetResource(HttpServletRequest request, HttpServletResponse response)
throws Exception{
//设置编码格式
response.setCharacterEncoding("utf-8"); //获取到角色的编号
String roleId = request.getParameter("roleId"); //开始根据角色的编号查询其下的权限资源
List<Map<String, Object>> resourcebyRole = bizUser.getResourcebyRole(roleId); List<Object> list = new LinkedList<Object>();
Iterator<Map<String, Object>> it = resourcebyRole.iterator();
//只获取到资源的名称,返回到前台即可
while(it.hasNext()){
Map<String, Object> resMap = it.next();
Object object = resMap.get("RES_NAME"); list.add(object);
}
//将资源的名称传递到前台的function(data){}的data.
return list;
}

(2):前台使用Jquery进行后台数据处理:Jquery速查网址

 $(document).ready(function(){
var roleId = null;
//获取到所有的角色RoleId
$(".roleId").each(function(){
//当鼠标移动到角色名称,触发事件,鼠标移入效果
$(this).mouseover(function(){
//鼠标点击效果,触发事件,鼠标移入效果
//$(this).click(function(){
//此句话获取到该span的id属性的值。
roleId = $(this).attr("id");
//alert(roleId);
//调用ajax异步请求,获取角色下面的资源
$.ajax({
type : "POST",//post类型请求。
data : {"roleId":roleId},//将每一次获取到角色id传递到后台。
url : "../right/getResource",//请求后台的路径
success : function(resourceByRole) {//参数即后台返回的数据。
//alert(resourceByRole);//先测试一下返回的数据是否正确
//判断是否为空或者为null
if(resourceByRole == null || resourceByRole == ""){
//然后根据div的class属性进行追加或者显示内容即可。
$(".resourceShow").html('<span style="color:red;">此角色下面没有权限</span>');
}else{
//
$(".resourceShow").text(resourceByRole);
}
},
});
})
});
});

  案例三:根据jqPaginator分页插件,实现异步动态加载自己的数据,刷新前台显示分页内容。

3:官网就是这个样子,不过github的页面貌似没法显示:http://jqpaginator.keenwon.com/

(1)前台展示,由于项目的原因,前台进行阉割了,必要内容都贴出来了:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jqpaginator分页</title>
<link rel="stylesheet" href="../css/bootstrap.min.css">
<!--引入必须的插件,毕竟使用别人的插件-->
<script src="../js/jquery-2.1.1.min.js" type="text/javascript"></script>
<script src="../js/bootstrap.min.js" type="text/javascript"></script>
<script src="../js/jqPaginator.min.js" type="text/javascript"></script>
</head>
<body> <table>
<thead>
<tr role="row">
<th >编号</th>
<th>时间</th>
<th>IP地址</th>
<th>操作对象</th>
<th>操作事件</th>
<th>结果</th>
</tr>
</thead>
<tbody id="tbody">
<%--
<c:forEach items="${logList }" var="logList" varStatus="status" begin="" step="">
<tr class="gradeX">
<td class="">${status.count}</td>
<td class="sorting_1">${logList.LOG_TIME}</td>
<td class="">${logList.LOG_SRC_IP}</td>
<td class="">${logList.APP_NAME}</td>
<td class="center">${logList.LOG_NAME}</td>
<td class="center">${logList.LOG_RESULT_DESC}</td>
</tr>
</c:forEach>
--%>
</tbody>
</table> <!---必须加id="pagination"-->
<ul id="pagination" id="pagination2"></ul> <!-- 分页操作 -->
<script type="text/javascript">
function getJsonLength(json){
var jsonLength=;
for (var i in json) {
jsonLength++;
}
return jsonLength;
} $.jqPaginator('#pagination', {
totalPages: ,//分页的总页数;默认0
visiblePages: ,//最多显示的页码数
//totalCounts: 10,//分页的总条目数;默认0
//pageSize: 10,//每一页的条目数;默认0
currentPage: ,//默认显示第几页
wrapper:'<ul class="pagination"></ul>',
first: '<li class="first"><a href="javascript:void(0);">首页</a></li>',
prev: '<li class="prev"><a href="javascript:void(0);">上一页</a></li>',
page: '<li class="page"><a href="javascript:void(0);">{{page}}</a></li>',
next: '<li class="next"><a href="javascript:void(0);">下一页</a></li>',
last: '<li class="last"><a href="javascript:void(0);">末页</a></li>',
onPageChange: function (num) {
$.ajax({
url: "../log/logList",
type: "POST",
dataType: 'json',
data: {"num": num},
success : function(data) {
//得到json值
var jsonLength = getJsonLength(data) - ;
var html = '';
//初始化后,动态修改配置,首先获取多少行,算出需要分几页
var totalCount = data[jsonLength].totalCount;
var pageTotal = Math.floor(totalCount / + );
$('#pagination').jqPaginator('option', {
//根据返回的总条目数动态显示页码总数
totalPages: pageTotal
});
//清空table里面的数据
$('#tbody').empty();
//循环遍历json字符串,然后动态赋值
for(var i=;i<jsonLength;i++){
var LOG_TIME = data[i].LOG_TIME;
var LOG_SRC_IP = data[i].LOG_SRC_IP;
var APP_NAME = data[i].APP_NAME;
var LOG_NAME = data[i].LOG_NAME;
var LOG_RESULT_DESC = data[i].LOG_RESULT_DESC;
html += '<tr>' +
'<td>' + LOG_TIME + '</td>' +
'<td>' + LOG_SRC_IP + '</td>' +
'<td>' + APP_NAME + '</td>' +
'<td>' + LOG_NAME + '</td>' +
'<td>' + LOG_RESULT_DESC + '</td>' +
'</tr>';
}
$('#tbody').append(html);
}
});
}
});
</script> </body>
</html>

(2)SpringMvc对数据进行处理和控制,由于直接调用别人写好的接口,控制层代码也许不适合你(奇葩的是,项目点击左边的栏目,跳转到一个页面,然后使用ajax异步加载出分页数据。):

JsonUtils工具类,也行不是很适合你,将java的List<Map<key,value>>转化为Json格式的;:

 public class JOSNUtil {

     public static String object2String(Object data) throws IOException {
ObjectMapper om = new ObjectMapper();
SimpleFilterProvider filterProvider = new SimpleFilterProvider().setFailOnUnknownId(false);
om.setFilters(filterProvider);
return om.writeValueAsString(data);
}
/**
*
* json转换list.
* <br>详细说明
* @param jsonStr json字符串
* @return
* @return List<Map<String,Object>> list
* @throws
* @author slj
* @date 2013年12月24日 下午1:08:03
*/
public static List<Map<String, Object>> parseJSON2List(String jsonStr){
JSONArray jsonArr = JSONArray.fromObject(jsonStr);
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = jsonArr.iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
return list;
} /**
*
* json转换map.
* <br>详细说明
* @param jsonStr json字符串
* @return
* @return Map<String,Object> 集合
* @throws
* @author slj
*/
public static Map<String, Object> parseJSON2Map(String jsonStr){
ListOrderedMap map = new ListOrderedMap();
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k : json.keySet()){
Object v = json.get(k);
//如果内层还是数组的话,继续解析
if(v instanceof JSONArray){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = ((JSONArray)v).iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
}
}

然后写控制层代码,如下所示:

 @RequestMapping(value="/logList",method=RequestMethod.POST)
protected @ResponseBody void getLogTable(final HttpServletRequest request, final HttpServletResponse response)
throws Exception {
response.setCharacterEncoding("utf-8");
//获取到用户的id
Map<String,Object> userMap=getLoginUser(request);
String userId=String.valueOf(userMap.get(TbUser.USER_ID.name));
//封装查询条件
Map<String, Object> searchCond = new HashMap<String, Object>();
searchCond.put(TbLog.USER_ID.name, userId);
List<Map<String, Object>> logList = null; //日志总数
int totalCount = bizLog.getLogCount(searchCond);
//获取到第几页,
String Pagenum = request.getParameter("num");
System.out.println("Pagenum:" + Pagenum);
if(Pagenum == null){
Pagenum = "";
}
//日志总数
//int totalCount = bizLog.getLogCount(searchCond);
//获取到当前页数
int currentPageNum = Integer.parseInt(Pagenum);
//显示的条数
int pageLength = ;
//起始值
int startRow = (currentPageNum-) * pageLength + ;
//第几页
//int totalPage = totalCount / pageLength + 1; Map<String, Object> totalCountCond = new HashMap<String, Object>();
//判断Session中该值是否为空
if (userId != null) {
//根据参数查询日志信息,参数2是从第几个开始,即起始值。参数3是每页多少条数据。
logList = bizLog.getLogList(searchCond, startRow, pageLength);
totalCountCond.put("totalCount", totalCount);//这里封装一下查询的总数,然后传给前台解析出来,设置显示多少页码总数
logList.add(totalCountCond);
}
System.out.println(JOSNUtil.object2String(logList));
//转换为JSON格式
response.getWriter().write(JOSNUtil.object2String(logList));
response.getWriter().flush();
response.getWriter().close();
}

显示如下,反正吧,都是公司的项目,代码啊,截图啊,都是阉割的,凑活着看吧:

待续......

前后台交互经常使用的技术汇总(后台:Java技术,前台:Js或者Jquery)的更多相关文章

  1. IT技术栈、JAVA技术栈、游戏开发技术栈

    一.形成IT思想,把各种技术融会贯通,使用时按需对技术选型. 二.对于每个知识点,框架的掌握依次分为三层. 1.会使用 2.熟悉原理 3.了解源码 三.思维导图

  2. ASP.NET前台JS与后台CS函数如何互相调用

    摘要: 在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况.今天就把比较实用的前后台相互调用的方法总结出来和大家分享. 在实际的Web开发中,我们可能会常常遇到 ...

  3. 5月份值得一看的 Java 技术干货!

    5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!! 废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是不得不 ...

  4. 后台调用前台js

    WEB后台代码调用前台JS(两种方式). 1   这种方式只能调用简单的JS代码.不能调用自定义的函数. string jss = "<script language='javascr ...

  5. 2020年度综合大盘点:火爆IT业的7大Java技术,每一项都是大写的“牛逼”!

    关注"Java这点事",每天与你分享Java技术.IT资讯 JAVA语言作为历史最为悠久的编程语言,从95年5月开始历经数十年依然盘踞在编程榜前三的位置,与它强大的功能和广泛的运用 ...

  6. Vue 前后台交互,插件

    目录 Vuex 插件 前端存储数据汇总 前后台交互方式(重点) axios 插件 同源策略-跨域问题 前后台分离项目交互流程 异步请求细节 Element-ui 插件 jQ + Bs插件 Django ...

  7. Devexpress 使用经验 —— ASPxGridView前后台交互写法推荐

    这里的格式是仁者见仁智者见智,这篇随笔只是我在工作过程中总结出的阅读性高,对我来说效率较高的写法. ASPX: <dx:ASPxGridView ID="ASPxGridViewLin ...

  8. jquery ajax返回json数据进行前后台交互实例

    jquery ajax返回json数据进行前后台交互实例 利用jquery中的ajax提交数据然后由网站后台来根据我们提交的数据返回json格式的数据,下面我来演示一个实例. 先我们看演示代码 代码如 ...

  9. JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统

    前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...

随机推荐

  1. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  2. 题解-AtCoder Code-Festival2017qualA-E Modern Painting

    Problem CODE-FESTIVAL 2017 qual A 洛谷账户的提交通道 题意:有一个\(n\)行\(m\)列的方格,在边界外有可能有机器人(坐标为\((0,x),(n+1,x),(x, ...

  3. latex中的希腊字母

    原文地址:http://blog.csdn.net/xxzhangx/article/details/52778539 希腊字母,我们从小学开始认识它,但对它的读音我依旧靠蒙(说蒙真的感觉好羞愧啊). ...

  4. NOIP模拟赛10 题解

    t3: 题意 给你一棵树,然后每次两种操作:1.给一个节点染色 : 2. 查询一个节点与任意已染色节点 lca 的权值的最大值 分析 考虑一个节点被染色后的影响:令它的所有祖先节点(包括自身)的所有除 ...

  5. Ubuntu 关闭触摸板

    1.关闭 sudo modporbe -r psmouse 2.开启 sudo modprobe psmouse

  6. jqueryui组件progressbar进度条和日期组件datepickers的简单使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. HDU 1796 (容斥原理)

    容斥原理练习题,忘记处理gcd 和 lcm,wa了几发0.0. #include<iostream> #include<cstdio> #include<cstring& ...

  8. 切换目录查询目录 tcp

    服务器 import socket import os import json sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() ...

  9. 关于socket.io获取客户端真实IP地址

    1 前言 由于使用了CDN加速,导致了socket.handshake.address拿到值都是服务器的,而没有使用CDN加速时,可以拿到客户端真实IP. 2 代码 if(socket.handsha ...

  10. VUE 生成二维码(qrcodejs)

    1. 概述 1.1 引入二维码生成模块 npm install qrcodejs2 --save 注意:此处安装qrcodejs2,安装依赖后可在main方法中进行全局引用设置,也可单独某个页面中进行 ...