`

query,bootstrap在开发中使用的总结

阅读更多

当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"));

    
     


     
                        



  





    
分享到:
评论

相关推荐

    bootstrap笔记总结

    Bootstrap是世界上最流行的...这个笔记总结涵盖了Bootstrap的基本概念和常见使用方法,是初学者和经验丰富的开发者构建响应式网页的强大工具。熟悉这些知识点,可以大大提高开发效率,创建出美观且功能齐全的网页界面。

    Bootstrap样式文件上传jquery插件

    3. **兼容性**:bootstrap-filestyle考虑到了旧版本浏览器的兼容性,特别支持了Internet Explorer 8,这在许多实际项目中是非常必要的,因为并非所有用户都使用最新的浏览器。 在使用这个插件时,你需要在你的HTML...

    基于javaweb 的bootstrap table使用案例源码下载

    在JavaWeb开发中,Bootstrap Table是一种非常流行的前端组件,它结合了Bootstrap框架的美观样式和强大的功能,使得在网页上展示数据变得更加便捷。本案例主要探讨如何利用Bootstrap Table与Ajax技术进行交互,实现...

    Bootstrap table使用方法汇总

    总结起来,Bootstrap table是Bootstrap框架中的一个强大工具,用于创建功能丰富的数据展示表格。通过理解其基本概念、依赖关系和使用方法,开发者能够轻松地在网页中集成和定制表格,提升项目的交互性和用户体验。

    解决JS组件bootstrap table分页实现过程中遇到的问题_.docx

    本文将针对在使用 JS 组件 Bootstrap Table 实现分页功能过程中遇到的一些常见问题进行详细分析,并提供相应的解决方案。 #### 二、问题与解决方案 ##### 问题1:服务器端取不到 form 值 **描述**: 在使用 ...

    解决JS组件bootstrap table分页实现过程中遇到的问题

    在JavaScript开发中,Bootstrap Table是一个常用的轻量级组件,用于创建功能丰富的表格,其中包括分页功能。本篇文章将深入探讨在实现Bootstrap Table分页时可能遇到的问题及其解决方案。 ### 问题1:服务器端无法...

    MVC4+三层架构+EF+Linq+bootstrap分页效果

    在MVC4项目中,使用EF可以方便地实现CRUD(创建、读取、更新和删除)操作,通过Linq(Language Integrated Query)来编写查询,使得代码更加简洁和直观。 **Linq(Language Integrated Query)** Linq是.NET ...

    HW内部使用 asp.net mvc框架 OA系统 模板大全 mvc+bootstrap+T4+EF+Linq 前端加后台

    在ASP.NET MVC中,Linq与EF结合使用,可以编写简洁、强类型的数据库查询,提高了代码的可读性和可维护性。 【总结】 本压缩包中的“wisex-master”项目是一个全面的ASP.NET MVC应用模板,它集成了Bootstrap前端...

    bootstrap-table后端分页功能完整实例

    在实际的 Web 开发中,为了提高性能和减少服务器负担,我们通常会采用后端分页技术,即在服务器端处理数据分页,而不是一次性加载所有数据到前端。本篇文章将详细介绍如何在 Bootstrap Table 中实现后端分页功能。 ...

    Bootstrap table两种分页示例

    在上述代码中,`queryParams`函数用于构造发送给服务器的参数,包括当前页号、每页大小以及可能的搜索条件。服务器接收到这些参数后,根据条件返回相应分页数据。 其次,**客户端分页** 是在浏览器端处理分页,适合...

    ssh三大框架通用配置

    在SSH框架中实现分页查询,通常在Service层计算总记录数,然后在DAO层使用Hibernate的`setFirstResult()`和`setMaxResults()`方法进行分页。Struts配置中,Action需要接收并处理分页参数(如当前页和每页条数),并...

    基于ssh开发的新闻发布系统

    总结,基于SSH框架开发的新闻发布系统是一个综合性的项目,涵盖了前端交互、后端业务逻辑、数据库操作和安全控制等多个方面,体现了SSH框架在企业级应用开发中的优势和灵活性。通过这个项目,开发者可以深入理解MVC...

    手机网页wap用Bootstrap还是jQuery Mobile

    而Bootstrap和jQuery Mobile是两种广泛使用的技术框架,它们在移动网页开发中扮演了重要的角色。下面我们将从框架解决问题的能力、功能特点以及适用场景这三个方面来对比这两个框架。 Bootstrap是一个CSS框架,它...

    Query+PHP+Mysql在线拍照和在线浏览照片

    在Web开发中,"Query"通常指的是用于与服务器交互的JavaScript技术,例如AJAX(Asynchronous JavaScript and XML),它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这在在线拍照功能...

    bootstrap IE8 兼容性处理

    因此,为了在IE8中使用Bootstrap的栅格系统,需要引入Respond.js脚本来为IE8提供媒体查询的支持。Respond.js是一个JavaScript脚本,它会拦截浏览器的媒体查询请求,并模拟相应功能。 其次,使用Respond.js时,还有...

    ProductManageSystem

    其次,Linq(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项创新技术,它允许开发者使用类似SQL的语法在.NET语言中进行对象查询。在"ProductManageSystem"的后端,Linq to SQL...

    使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法

    在实际开发中,掌握好JavaScript和相关的库,以及理解其API的更新和变化,对于避免类似问题至关重要。同时,了解基本的网络请求机制(如JSONP)和正则表达式也是解决问题的关键。记住,技术文档和社区资源是解决问题...

    Laravel开发-grids

    总结来说,Laravel中的Grids开发涵盖了数据库操作、数据展示、前端框架集成、用户交互等多个方面,涉及到的技术点广泛且深入。通过熟练掌握这些知识点,开发者可以构建出高效、功能丰富的数据管理界面。

    Laravel开发-pagination

    要使用分页,首先确保在控制器中正确地限制了查询数据的数量。例如,如果你想要每页显示10条记录,可以在查询时添加`-&gt;take(10)`: ```php $items = YourModel::query()-&gt;take(10)-&gt;get(); ``` 然后,使用`...

    银行管理系统:这是一个银行管理系统网站,用户可以在其中登录自己的帐户并进行交易。该网站使用html,css,javascript,bootstrap,mysql和php建立。对于我使用的数据库xampp服务器

    开发者会使用SQL(Structured Query Language)来创建、查询、更新和管理数据库。 PHP(Hypertext Preprocessor)是一种服务器端脚本语言,常用于处理Web应用中的后端逻辑,如处理用户提交的表单数据、与数据库交互...

Global site tag (gtag.js) - Google Analytics