- 浏览: 49464 次
文章分类
最新评论
当ajax请求返回的数据date如上面所显示,要达到下图所示的效果:
实体:
修改页面:
JS:
1、Jquery中判断一个集合或数组是否为空:
var rightList = {};// 右边列表
if($.isEmptyObject(rightList)){
alert("请至少选择ploicy列表中的一项");
return false;
}
2、初始化表单:禁用表单默认提交,指定回车触发按钮
inputSecltor是input的ID,
btnSecltor是按钮的ID,
formSelec是form表单的ID
enterClick:function(inputSecltor,btnSecltor,formSelector){
$("#"+formSelector).submit(function(e){
e.preventDefault();
});
$("#"+inputSecltor).keydown(function(e){
var currKey=0,e=e||event;
currKey=e.keyCode||e.which||e.charCode;
if(currKey==13){
$("#"+btnSecltor).trigger('click');
}
});
}
3、 //更改modal框的宽度为自适应 modal_size:function(secltor){
//选择器下的div下的class=modal-dialog的样式设计
$("#"+secltor+">div.modal-dialog").css({
width:'auto',
'margin-left':function(){
return -($(this).width())/2;
}
});
}
4、//设置选择的元素的input是值是“”,select中的value
function initValidForm(selector){
$(selector+" input").val("");
$(selector+
" select option:first-child").attr("selected", true).siblings().removeAttr("selected"); $(selector+" .has-error").removeClass("has-error").children("label.error").hide();
}
5、在form表单中不同实体数据属性的提交
JS:
$("button#save_edit").bind("click", function() {
var templateId=$("#templateName_edit").prop("name");
// 获取表格的模板名称
var policyTemplateName =$("#templateName_edit").val();
var test = [];
$.each(rightList, function(k, obj) {
//将右边列表中的数据放入到test数组中
test.push(obj);
})
// 获取左边字典的列表[],将模板的ID,模板名称,右边的列表的数组封装成一个对象, 传入到后台
var j = {
"templateId": templateId,
"policyTemplateName" : policyTemplateName,
"leftChangeList" : test
};
// ajax修改数据库数据。成功时执行以下数据。
$.ajax({
'url' : $.baseUrl +"/policyTemplateInfoManager/updatePolicyTemplateInfo",
'type' : "post",
'contentType' : 'application/json',
'data' : JSON.stringify(j),
'success' : function(data) {
if (data != null) {
alert("保存成功!");
$("#editDiv").modal('hide');
table.draw();
} else {
alert("保存出错!");
}
},
});
});
JSON.stringify(j):
在实体中leftChangeList是list集合,集合中存放的是字典对象,所以在前台需要声明一个存放对象的数组test[]
{"policyTemplateName":"ax","leftChangeList":[{"policyId":14,"policyName":"PollDelay1","policyType":"0","defaultValue":"60","remark":null,"createTime":"2016-08-01 19:34:00"},{"policyId":11,"policyName":"PrimaryIpAddr1","policyType":"1","defaultValue":"192.168.118.202","remark":"","createTime":"2016-08-01 19:34:00"}]}
后台接收ajax请求传值的JSON.stringify(j)
@RequestMapping(value = "/updatePolicyTemplateInfo", method = RequestMethod.POST)
@ResponseBody
public String updatePolicyTemplateInfo(@RequestBody PolicyTemplateRelationModel params, HttpServletRequest request)
PolicyTemplateRelationModel是封装的前台传过来的test{}
PolicyTemplateRelationModel实体:
JSON.stringify(leftChangeList):将左边列表发生的改变的转换成json字符串
例如 :
console.log(leftChangeList);
输出的结果:[object Object]
console.log(JSON.stringify(leftChangeList));
输出的结果:
PollDelay1:是左侧列表字典的名称,对应一个字典对象
{"PollDelay1":{"policyId":14,"policyName":"PollDelay1","policyType":"0","defaultValue":"60","remark":null,"createTime":"2016-08-01 19:34:00"}}
6、SpringMVC传递参数
handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型)
A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解: @PathVariable;
B、处理request header部分的注解: @RequestHeader, @CookieValue;
C、处理request body部分的注解:@RequestParam, @RequestBody;
D、处理attribute类型是注解: @SessionAttributes, @ModelAttribute;
(1)、 @PathVariable
当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
例如:
Html:
<button data-code=''type='button' class='btn-sm' id='delTemplate"+row.templateId+"'data-localize=''
onclick='delTemplate("+row.templateId+");'>删除</button>
JS:
$.ajax({
'url': $.baseUrl+"/policyTemplateManager/deletePolicyTemplate/"+id,
'type': "post",
'contentType' : 'application/json'
});
Controller:
@RequestMapping(value = "/deletePolicyTemplate/{id}", method = RequestMethod.POST)
@ResponseBody
public boolean deletePolicyTemplate(@PathVariable Integer id ){}
(2)、 @RequestHeader、@CookieValue
@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。
一个Request 的header部分:
1.Host localhost:8080
2.Accept text/html,application/xhtml+xml,application/xml;q=0.9
3.Accept-Language fr,en-gb;q=0.7,en;q=0.3
4.Accept-Encoding gzip,deflate
5.Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
6.Keep-Alive 300
Controller:
1.@RequestMapping("/displayHeaderInfo.do")
2.public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive) {
3.}
@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。
例如有如下Cookie值:
1.JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
参数绑定的代码:
1.@RequestMapping("/displayHeaderInfo.do")
2.public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie) {
3.}
(3)、@RequestParam, @RequestBody
@RequestParam
A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;
B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;
C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;
例如ajax处理get 方式的请求:
$.ajax({
'url' : $.baseUrl+"/policyDictionaryManager/listPolicyDictionary?templateId="+templateId,
'type' : 'get',
'contentType' : "application/json",
'
});
Controller:
@RequestMapping(value = "/listPolicyDictionary",
method = { RequestMethod.POST, RequestMethod.GET }
)
@ResponseBody
public Map<String, QipPolicyDictionaryTable> getPolicyDictionaryList(@RequestParam("templateId") Integer templateId)}
例如:ajax处理post方式的请求:
$.ajax({
'url': $.baseUrl+"/policyDictionaryManager/detailPolicyDicti onary",
'type': "post",
'data': {"policyId": policyId}
});
Controller:
@RequestMapping(value = "/detailPolicyDictionary", method = RequestMethod.POST)
@ResponseBody
public QipPolicyDictionaryTable deltailPolicyDictionary(@RequestParam("policyId") Integer policyId) throws JsonProcessingException {}
@RequestBody
该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;
例如:
var addForm = Util.getObject("form#addForm");
$.ajax({
'url': $.baseUrl+"/policyDictionaryManager/savePolicyDictionary",
'type': "post",
'contentType' : 'application/json',
'data': JSON.stringify(addForm)
});
Controller:
@RequestMapping(value = "/savePolicyDictionary", method = RequestMethod.POST)
@ResponseBody
public String saveOptionDictionary(@RequestBody @Valid QipPolicyDictionaryTable policyDictionary){}
7、清空页面中的数据
(1)、清空table中的内容:table的id=listDictinaryDetail,清空操作: $("#listDictinaryDetail").empty();
(2)清空table去首行的tr外的所有内容,table的id=totalMsgReport,清空操作:$("#totalMsgReport tr:not(:first)").html("");
8、select 初始化值,option 的value是id,内容是name
//添加,初始化阈值字典的下拉列表中的值
function initThresholdDictionaryName(){
$.ajax({
'url': $.baseUrl+"/thresholdLevelManager/allThresholdItem",
'type' : 'post',
'contentType' : "application/json",
'success': function(data){
var selector = "#selectDictinaryID,#selectDictinaryID1";
$(selector).empty().append(
"<option value=''>--请选择阈值项名称--</option>");
for (var i in data) {
$(selector).append(
"<option value=\""+data[i]['itemID']+"\">"+data[i]['itemName']+"</option>");
}
},
});
}
调用: initThresholdDictionaryName();
其中data在控制台显示的是一个list,即是一个存放对象的数组,相当于是一个二维数组,后台数据返回的list<Object>集合在前端输出样式:
[
{
"serviceId":1,"serviceName":"VOIP","serviceSimple":"VOIP",
"summary":"VOIP","createTime":"2016-08-15 18:13:28"
},封装的是一个对象所有的字段
{
"serviceId":2,"serviceName":"IPTV","serviceSimple":"IPTV",
"summary":"", "createTime":"2016-08-01 11:24:23"
},封装的是一个对象所有的字段
]
在对data进行遍历:
i 是每一对象,data 是二维数组
for(var i in data){
data[i]['itemID']:获取的是每一个对象中字段是itemID的值
data[i]['itemName']:获取的是每一对象中字段是itemName 的值。
}
在引号中追加标签时应注意的点:
(1)、正常的<option value="">内容</option>
(2)、遇到双引号需要进行\进行转换
<option value=\"\">
Value中是变量时需要使用"+变量+"
即: <option value=\""+data[i]+"\">
变量中有常量时需要将双引号变成单引号
即: <option value=\""+data[i]['itemID']+"\">
(3)、option的内容是变量时,需要"+内容变量+" 即:<optionvalue=\""+data[i]['itemID']+"\">"+data[i]['itemName']+"</option>
9、Select 另外一种初始方式:
//初始化添加下拉列表中的业务名称
function initServiceName(selector){
$.ajax({
'url':$.baseUrl+"/service/allServices",
'contentType':"application/json",
'type':"post",
'success': function(data){
$(selector).empty().append("<option value=\"\">"+"选择业务名称"+"</option>");
for (var i in data) { $(selector).append("<option value=\""+data[i]['serviceId']+"\">"+data[i]['serviceName']+"</option>");
}
$("#searchServiceSelect").val(t);
},
});
}
调用: initServiceName("#searchServiceSelect");
10、数据修改获取选择对象的值并进行input的赋值
例如:1,对每个input逐个赋值
var beforeEditData = null;
$('#example tbody').on( 'click', 'button#editbtn', function () {
//获取要修改的行对象
var row = table.row( $(this).parents('tr') );
var data = row.data();
beforeEditData = data;
$("#selectDictinaryID1").val(data["thresholdItem"]["itemID"]);
$("#editor-thresholdValue").val(data["thresholdValue"]);
$("#selectAlarmLevelID1").val(data["alarmLevel"]["id"]);
$("#selectAlarmLevelID2").get(0).selectedIndex=0;
$("#editThreshold").modal("show");
});
注意点:
如果获取选中修改行的对象Department数据{},里面存放的可能是下面的样式:
后台返回前台的只是包含普通字段的对象
(1),{"name":"市场部","type":"销售"}
获取里面的市场部和销售可以:roe.data()['name']
roe.data()['tyep']
后台返回前台的不仅包含普通字段的,还有list对象
(2),{"name":"市场部","type":"销售",
"person":[{"pname":"张三","age":20},{" pname":"李四","age":20}]
}
例如:1,通过循环对每个input赋值
var beforeEditData = null;
$('#example tbody').on( 'click', 'button#editbtn', function () {
var row = table.row( $(this).parents('tr') );
var data = row.data();
beforeEditData = data;
data['rowId'] = row.index();
var fields = $("#editBrasConf form").serializeArray();
jQuery.each( fields, function(i, field){
$("#editBrasConf [name='"+field.name+"']").val(data[field.name]);
});
$("#editBrasConf").modal("show");
});
注意点:
(1)serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。
即:[
{name: 'firstname', value: 'Hello'},
{name: 'lastname', value: 'World'},
{name: 'alias'}, // 值为空
]
您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身。
serializeArray() 方法序列化表单元素,返回 JSON 数据结构数据。
此方法返回的是 JSON 对象而非 JSON 字符串。
返回的 JSON 对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对
—— name 参数和 value 参数(如果 value 不为空的话)。
(2) form 中是普通的对象的字段
var fields = $("#editBrasConf form").serializeArray();
输出:
Console.log(fields );
结果:
fields---->[object Object],[object Object],
[object Object],[object Object]
console.log("field.name--->"+field.name);
结果:
field.name--->srinterfaceip
field.name--->serviceName
field.name--->srloopbackip
field.name--->srname
field.name--->sralias
输出:console.log("data[field.name]---->"+data[field.name]);
结果:
data[field.name]---->192.168.10.1
data[field.name]---->VOIP
data[field.name]---->192.168.10.1
data[field.name]---->192.168.10.1
data[field.name]---->192.168.10.1
(3)遍历匹配form中和name相同属性,并对value赋值
jQuery.each( fields, function(i, field){
$("#editBrasConf [name='"+field.name+"']").val(data[field.name]);
});
11、查看一个对象的个别字段,即查看详情信息
//查看阈值级别详情
function deltailThresholdLevel(){
$('#example tbody').on( 'click',"button#searchThrsholdDetail", function(){
var data = table.row( $(this).parents('tr') ).data();
var id = data['id'];
$.ajax({
'url': $.baseUrl+"/thresholdLevelManager/detailThresholdLevel",
'type': "post",
'data': {"id": id},
'success': function(d){
var list=["itemName","thresholdValue","leveName","description"];
if(d!=null){
//清空表中的内容
$("#listThresholdLevelDetail").empty();
//遍历对列赋值
$.each(list,function(k,v){
if(v=="itemName"){
var tr=$("<tr><td>阈值项名称</td><td>"+d[v]+"</td></tr>");
}
if(v=="thresholdValue"){
var tr=$("<tr><td>告警阀值</td><td>"+d[v]+"</td></tr>");
}
if(v=="leveName"){
var tr=$("<tr><td>告警级别</td><td>"+d[v]+"</td></tr>");
}
if(v=="description"){
var tr=$("<tr><td>阈值级别描述</td><td>"+d[v]+"</td></tr>");
}
//将行添加到table中
tr.appendTo($("#listThresholdLevelDetail"));
//显示详情信息
$("#showThresholdLevelDetail").modal('show');
});
}
else{alert("该模板暂无详情信息");}
},
});
});
}
注意点:
(1).获取一个对象的详情信息,需要通过ID先查找到该对象,
即:要首先获取对象的ID,后台通过ID查找到对象,前台对部分数据进行显示。
var data = table.row( $(this).parents('tr') ).data();
var id = data['id'];
(2).如何只显示后台返回对象的个别字段?
解决办法:
可以在返回整个对象成功情况下,在js中定义一个存放个别字段的数组,
然后遍历自定义的数组进行匹配,对td赋值。
即
后台通过ID返回的对象:
{
"leveName":"严重","thresholdValue":"50",
"itemName":"磁盘利用率","description":"cpu利用率2级告警阈值"
}
自定义的数组
var list=["itemName","thresholdValue","leveName","description"];
遍历 list
K是list数组的下标,v是value值
d[v]是得到的是对象中对应字段的value值
$.each(list,function(k,v){
if(v=="itemName"){
var tr=$("<tr><td>阈值项名称</td><td>"+d[v]+"</td></tr>");
}
}
(3)、动态将tr追加到table表中
tr.appendTo($("#listThresholdLevelDetail"));
发表评论
-
validate自动校验
2016-09-23 15:32 1066<!DOCTYPE html> <html& ... -
jquery选择器总结
2016-09-22 10:59 496jQuery 的选择器可谓之强 ... -
网页选项卡的切换
2016-09-22 10:53 446<!DOCTYPE html> <html& ... -
JQuery的extend扩展
2016-09-18 15:23 435JQuery的extend扩展方法: Jquery ... -
jquery实现全选,全不选,反选效果
2016-09-13 15:41 440<!DOCTYPE html PUBLIC " ... -
jquery实现全选,全不选,反选效果
2016-09-13 15:40 0<!DOCTYPE HTML> <html& ... -
封装数据_方法
2016-08-26 17:30 500var simple_confNetwork={ in ... -
jquery对对象数组的遍历的两种方式
2016-08-26 15:00 1918jquery对对象数组的遍历的两种方式 data: [ { ... -
select初始化操作
2016-08-23 15:54 790select 初始化值,option 的value是id,内容 ... -
select初始化操作
2016-08-23 15:50 0select 初始化值,option 的value是id,内容 ... -
bootstrap日期插件daterangepicker的使用
2016-08-22 10:59 921今天用的了bootstrap日期插件感觉搜索的资料不是很多在此 ... -
Jquery选择器
2016-08-19 10:08 651JQuery: 一:入门 二:选择器 三:DOM操作 四:事件 ... -
Vue.js 60 分钟快速入门
2016-08-19 09:20 546Vue.js介绍 Vue.js是当下很火的一个JavaScr ... -
Java构造和解析Json数据的两种方法详解一
2016-08-18 13:01 428在www.json.org上公布了很多JAVA下的json ... -
HTML5时钟
2016-08-18 12:31 518本示例使用HTML5的canvas标签和Javascript脚 ... -
同步更新input中的内容
2016-08-16 14:15 538HTML: <div class="form ... -
JQuery验证
2016-08-16 09:46 518js-----> var table = in ... -
jQuery.Validate验证库的使用
2016-08-15 16:24 503一、用前必备 转载:http://www.cnblogs.c ...
相关推荐
Bootstrap是世界上最流行的...这个笔记总结涵盖了Bootstrap的基本概念和常见使用方法,是初学者和经验丰富的开发者构建响应式网页的强大工具。熟悉这些知识点,可以大大提高开发效率,创建出美观且功能齐全的网页界面。
3. **兼容性**:bootstrap-filestyle考虑到了旧版本浏览器的兼容性,特别支持了Internet Explorer 8,这在许多实际项目中是非常必要的,因为并非所有用户都使用最新的浏览器。 在使用这个插件时,你需要在你的HTML...
在JavaWeb开发中,Bootstrap Table是一种非常流行的前端组件,它结合了Bootstrap框架的美观样式和强大的功能,使得在网页上展示数据变得更加便捷。本案例主要探讨如何利用Bootstrap Table与Ajax技术进行交互,实现...
总结起来,Bootstrap table是Bootstrap框架中的一个强大工具,用于创建功能丰富的数据展示表格。通过理解其基本概念、依赖关系和使用方法,开发者能够轻松地在网页中集成和定制表格,提升项目的交互性和用户体验。
本文将针对在使用 JS 组件 Bootstrap Table 实现分页功能过程中遇到的一些常见问题进行详细分析,并提供相应的解决方案。 #### 二、问题与解决方案 ##### 问题1:服务器端取不到 form 值 **描述**: 在使用 ...
在JavaScript开发中,Bootstrap Table是一个常用的轻量级组件,用于创建功能丰富的表格,其中包括分页功能。本篇文章将深入探讨在实现Bootstrap Table分页时可能遇到的问题及其解决方案。 ### 问题1:服务器端无法...
在MVC4项目中,使用EF可以方便地实现CRUD(创建、读取、更新和删除)操作,通过Linq(Language Integrated Query)来编写查询,使得代码更加简洁和直观。 **Linq(Language Integrated Query)** Linq是.NET ...
在ASP.NET MVC中,Linq与EF结合使用,可以编写简洁、强类型的数据库查询,提高了代码的可读性和可维护性。 【总结】 本压缩包中的“wisex-master”项目是一个全面的ASP.NET MVC应用模板,它集成了Bootstrap前端...
在实际的 Web 开发中,为了提高性能和减少服务器负担,我们通常会采用后端分页技术,即在服务器端处理数据分页,而不是一次性加载所有数据到前端。本篇文章将详细介绍如何在 Bootstrap Table 中实现后端分页功能。 ...
在上述代码中,`queryParams`函数用于构造发送给服务器的参数,包括当前页号、每页大小以及可能的搜索条件。服务器接收到这些参数后,根据条件返回相应分页数据。 其次,**客户端分页** 是在浏览器端处理分页,适合...
在SSH框架中实现分页查询,通常在Service层计算总记录数,然后在DAO层使用Hibernate的`setFirstResult()`和`setMaxResults()`方法进行分页。Struts配置中,Action需要接收并处理分页参数(如当前页和每页条数),并...
总结,基于SSH框架开发的新闻发布系统是一个综合性的项目,涵盖了前端交互、后端业务逻辑、数据库操作和安全控制等多个方面,体现了SSH框架在企业级应用开发中的优势和灵活性。通过这个项目,开发者可以深入理解MVC...
而Bootstrap和jQuery Mobile是两种广泛使用的技术框架,它们在移动网页开发中扮演了重要的角色。下面我们将从框架解决问题的能力、功能特点以及适用场景这三个方面来对比这两个框架。 Bootstrap是一个CSS框架,它...
在Web开发中,"Query"通常指的是用于与服务器交互的JavaScript技术,例如AJAX(Asynchronous JavaScript and XML),它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这在在线拍照功能...
因此,为了在IE8中使用Bootstrap的栅格系统,需要引入Respond.js脚本来为IE8提供媒体查询的支持。Respond.js是一个JavaScript脚本,它会拦截浏览器的媒体查询请求,并模拟相应功能。 其次,使用Respond.js时,还有...
其次,Linq(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项创新技术,它允许开发者使用类似SQL的语法在.NET语言中进行对象查询。在"ProductManageSystem"的后端,Linq to SQL...
在实际开发中,掌握好JavaScript和相关的库,以及理解其API的更新和变化,对于避免类似问题至关重要。同时,了解基本的网络请求机制(如JSONP)和正则表达式也是解决问题的关键。记住,技术文档和社区资源是解决问题...
总结来说,Laravel中的Grids开发涵盖了数据库操作、数据展示、前端框架集成、用户交互等多个方面,涉及到的技术点广泛且深入。通过熟练掌握这些知识点,开发者可以构建出高效、功能丰富的数据管理界面。
要使用分页,首先确保在控制器中正确地限制了查询数据的数量。例如,如果你想要每页显示10条记录,可以在查询时添加`->take(10)`: ```php $items = YourModel::query()->take(10)->get(); ``` 然后,使用`...
开发者会使用SQL(Structured Query Language)来创建、查询、更新和管理数据库。 PHP(Hypertext Preprocessor)是一种服务器端脚本语言,常用于处理Web应用中的后端逻辑,如处理用户提交的表单数据、与数据库交互...