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. 反卷积(deconvolution)

    deconvolution讲解论文链接:https://arxiv.org/abs/1609.07009 关于conv和deconvoluton的另一个讲解链接:http://deeplearning ...

  2. python实战===教你用微信每天给女朋友说晚安【转】

    转自:https://www.cnblogs.com/botoo/p/8622379.html#4081184 但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每 ...

  3. Delphi 使用 Datasnap 的几种三层应用技术总结

    Delphi 使用 Datasnap 进行三层应用开发,积累了几种技术,总结如下: 1.(推荐!)在 Datasnap 服务端 使用 TDatasetProvider,客户端 使用   TDSProv ...

  4. MySQL索引调优【转】

    一.关于查询计划 其实,关于所有的关系型数据库中,在运行T-SQL语句的时候,在查询器进行编译运行的同时,都会有着自己的内部的一个优化过程,而这优化之后的产物就是:执行计划. 在SQL SERVER中 ...

  5. sublime修改侧边栏字体

    安装了sublime的material主题后,侧边栏的字体特别小,设置方法如下: 安装插件 用上面的插件打开 Material-Theme.sublime-theme 如下 { "class ...

  6. ObjectArx2013新建工程出错的解决办法

    最近将一个ObjectArx升级到Arx2013版,使用ObjectArx2013向导时,新建项目时弹出错误"未能加载项目文件.给定编码中的字符无效.第1行,位置1",经网上查找发 ...

  7. node-删除对象中指定属性失效问题-JSON.parse实例化

    需求描述: 删除 _body 对象里的 code 字段.用 detele 删除后输出的_body 里仍有 code 字段. body是从后台得到的json串,所以要先 parse 转换成对象,本以为 ...

  8. 021_mac提效神奇Alfred

    一.破解版下载 (1)https://pan.baidu.com/s/1Kb0HtybvdA1yzHeOWUFM_w 提取码:9tq2 Reference:https://www.jianshu.co ...

  9. zabbix在运维方面的监控方法小结

    一些经典的运维问题: .配置文件中有空格,导致服务端下发的域名出现问题 .修改数据库没有备份 .修改dnspod问题,指向了错误的IP地址 .时间不一致,需要重新设定时区 .启动程序必须是最新版本,如 ...

  10. 如何在Mac 终端上Git 项目的一次常规操作

    首先,Git的工作流是怎样的? 你的本地仓库由 git 维护的三棵“树”组成. 第一个是你的 工作目录,它持有实际文件: 第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动: 最后是 H ...