1. 程式人生 > >個人筆記 -- 勿入

個人筆記 -- 勿入

雜記

個人日常開發遇到的問題,記憶力不好沒辦法,記錄以防再次遇到。

Spring&Springmvc

日常開發Spring&Springmvc遇到的問題。(腦子記不住沒辦法)

SpringMVC怎麼獲取前臺傳來的陣列

  • 前臺頁面 JS
var ids = new Array();
ids.push(1);
ids.push(2);
$.ajax({
    url : "xxx/xxx"
    type : "post",
    data : {"ids" : ids},
    dataType : "josn",
    success : function
() { ... } });
  • Spingmvc 後臺 controller 接收
@RequestMapping(value = "xxx")
@ResponseBody
public XXX xxx(@RequestParam("ids[]") List<Integer> ids) {
    ...
}

二維碼

輸出到頁面

頁面

<img src="xxxx/getQRcode" .../>

後臺

@RequestMapping(value = "getQRcode")
public void getQRcode
(HttpServletResponse response, String code) { response.setHeader("Content-Type", "image/jpeg"); byte[] img = null; try { if(StringUtils.isNotBlank(code)) { // 生成二維碼 img = qRCodeUtilService.createQrImage(code, PathConstants.QR_LOGO); } response.getOutputStream().write(img); response.flushBuffer(); } catch
(Exception e) { logger.error("create QRcode fail -- params : code={}", code, e); } }

JS

日常開發常用js

Checkbox 全選&全不選&全選判斷

<input type="checkbox" id="check_all">
<input type="checkbox" class="checkbox">
<input type="checkbox" class="checkbox">
<script>
//全選與全不選
var checkAll = function(obj) {
    if($(obj).attr('checked')){
        $('input[type=checkbox]').attr('checked','true');
    } else {
        $('input[type=checkbox]').removeAttr("checked");
    }
};

$(function(){  
    //表格中單個checkbox點選事件
    $('.checkbox').click(function(){
        if(!$(this).attr('checked')) {
            $('#check_all').removeAttr("checked");
        } else {
            var checks = $('.checkbox');
            var flag = true;
            for(var i = 0; i < checks.length ; i++){ 
                if(checks[i].checked != true){ 
                    flag = false;
                } 
            }   
            if(flag) {
                console.log(true);
                $('#check_all').attr("checked","true");
            } else {
                console.log(false);
                $('#check_all').removeAttr("checked");
            }
        }
    });
}
</script>

時間有效性校驗

作用:提高時間校驗嚴謹性。
正確的時間格式(yyyy-MM-dd HH:mm:ss): 2015-12-30 11:25:00
錯誤的時間格式:2015-12-33 11:25:00 、2015-13-30 11:25:00 、2015-12-30 25:25:00

//| 日期時間有效性檢查 
//| 格式為:YYYYMMDDHHMMSS 
var checkDateTime = function (str){ 
    console.log(str);
    var reg = /^(\d{4})(\d{1,2})(\d{1,2})(\d{1,2})(\d{1,2})(\d{1,2})$/; 
    //| 格式為:yyyy-MM-dd HH:mm:ss 時
    //| var reg = /^(\d{4})-(\d{1,2})-(\d{1,2})\s(\d{1,2}):(\d{1,2}):(\d{1,2})$/; 
    var r = str.match(reg); 
    if(r==null) return false; 
    r[2]=r[2]-1; 
    var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]); 
    if(d.getFullYear()!=r[1]) return false; 
    if(d.getMonth()!=r[2]) return false; 
    if(d.getDate()!=r[3]) return false; 
    if(d.getHours()!=r[4]) return false; 
    if(d.getMinutes()!=r[5]) return false; 
    if(d.getSeconds()!=r[6]) return false; 
    return true; 
} 

時間格式化

作用: 格式化時間,針對js輸出類似2015-12-30T11:42:00這樣的時間格式。

/**
 * 格式化日期
 * Y 年
 * M 月
 * d 日
 * h 小時
 * m 分
 * s 秒
 * S 毫秒
 * @param format 格式化日期字串
 * @eg:YYYY年MM月dd日 HH:mm:ss  return 2014年12月21日 15:40:18
 */
common.dateFormat = function(dateObj, format) {
    var o = {
        "M+": dateObj.getMonth() + 1,
        //month
        "d+": dateObj.getDate(),
        //day
        "H+": dateObj.getHours(),
        //hour
        "m+": dateObj.getMinutes(),
        //minute
        "s+": dateObj.getSeconds(),
        //second
        "q+": Math.floor((dateObj.getMonth() + 3) / 3),
        //quarter
        "S": dateObj.getMilliseconds() //millisecond
    }
    if (/(Y+)/.test(format)) {
        format = format.replace(RegExp.$1, (dateObj.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return format;
}

郵箱驗證正則

var pattern = /^([\.a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;  

手機號碼正則

/**
 * 支援號碼段:
 * 移動:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
 * 聯通:130、131、132、152、155、156、185、186
 * 電信:133、153、180、189、(1349衛通)
 * 京東、阿里、小米:170、(177 待確認)
 */
var pattern = /^(((13[0-9])|(15[^4,\\D])|(18[0,5-9])|(170))+\d{8})$/;

console – IE 中無法使用

我們一般都會使用 console.log() 列印一些除錯資訊到控制檯,但是在 IE 瀏覽其中,console是無法使用的,在測試、上線時需要刪除。

檢驗連結是否有效

檢驗頁面輸入的連結是否有效(是否可以訪問),IE 瀏覽器可以使用 ActiveObject 進行檢查,但是其他瀏覽器不行,這裡使用簡單粗暴的 ajax 返回狀態進行檢測。

function NetPing(url) {
    var flag = false;
    $.ajax({
        type : "GET",
        async : false,
        cache : false,
        url : url,
        complete: function(response) {
            if(response.status == 200) {
                flag = true;
            } 
        }
    });
    return flag;
}

Ajax下不能使用$(this)

ajax 下是不能使用$(this)的,這種情況,可以在 ajax 的外面定義一個變數代替,但是注意不能使用關鍵字this

function  Xxx(){
    var myThis = $(this);
    $.ajax({
        ...
        myThis.Xxx();
    })
}

.find()選擇器

.find()選擇器,返回的是一個列表,不能像css選擇器 $('.xxx')一樣操作物件, 但是可以獲取html等內容。

$(this).find('.xxx').html();       -- [ok]
$(this).find('.xxx').empty();      -- [no][但也不會報錯]
$(this).find('.xxx').append();     -- [no][但也不會報錯]
$(this).find('.xxx').html('xxx');  -- [no][但也不會報錯]

如果需要執行appendempty等操作,可以使用.first()或者.find('.xxx:first-child')找到對應的元素。

$(this).find('.xxx').first().empty();

ajax 非同步載入內容的動態監聽

$(function(){
    $('xxx').click(function(){
        $.ajax({
            ...
            success : function(data){
                ...
                $('xxx').append('<a>非同步載入內容</a>');
                ...
            }
        });
    });

    // 連結點選事件
    $('a').click(function(){
        ...
    });
});

上述情況下,非同步載入的內容,無法觸發定義的連結點選事件,定義一個監聽即可,並在ajax載入時呼叫即可。

$(function(){
    ...
        success : function(data){
            ...
            $('xxx').append('<a>非同步載入內容</a>');
            aClickListener();
        }
    ...
});


function aClickListener() {
    // 連結點選事件
    $('a').click(function(){
        ...
    });
}

JQuery 構建form

function buildForm(){
    var buildForm = $('<form></form>');
    buildForm.attr('action', 'xxx.xxx.xxx');
    buildForm.attr('target', '_blank');
    buildForm.attr('method', 'POST');

    var input_id = $('<input type="text" name="id">');
    input_id.attr('value', 1);

    buildForm.append(input_id);
    buildForm.submit();
}

MySql

add … after

在某個欄位之後新增欄位

alter table `xxxDB`.`xxxtable` add `name` varchar(48) default null comment '名稱' after `id`;

modify

修改

alter table `xxxDB`.`xxxtable` modify `name` varchar(56) default null comment '名稱';

多欄位排序

-- 多個欄位
select * from table order by (case1, case2);

-- 多個欄位的和
select * from table order by (case1 + case2);

-- 多個欄位的差
select * from table order by (case1 - case2);

freemarker

html 轉義

<#escape x as x?html>
...
<#noescape> 
    ...
</#noescape>
...
</#escape>

<#escape x as x?html></#escape>的部分,後臺傳入的內容都會作為字串輸出,但是特定的情況下,我們需要輸出html時,可以使用<#noescape>內容</#noescape>包含輸出。這樣就能按照html的規範轉換對應的連結、按鈕、圖片,而不是一串帶標籤的字串。

<#escape x as x?html>
...
<#noescape> 
    ${(content)!}

    <#-- 未轉義的內容  <p><img src="xxx"></p> -->
</#noescape>
    ${(content)!}
    <#-- 轉義之後的內容  "<p><img src="xxx"></p>"  (帶雙引號的字串,不會被html識別)-->
</#escape>

javabean boolean 型別判斷

--現象

-- javabean
public class Xxx {
    private Boolean isFlag;
    ...

    public Boolean isFlag(){
        return this.isFlag;
    }
    ...
}

-- freemarker .ftl 頁面
...
<#if Xxx.isFlag> 
    ...
</#if>
...

--------------------
這種情況下,開啟頁面直接報錯

原因: freemarker 讀取Xxx.isFlag時,找不到對應的get()方法。
解決方案:將javabean的isFlag()改成getIsFlag()

public class Xxx {
    private Boolean isFlag;
    ...

    public Boolean getIsFlag(){
        return this.isFlag;
    }
    ...
}

相關推薦

個人筆記 --

雜記 個人日常開發遇到的問題,記憶力不好沒辦法,記錄以防再次遇到。 Spring&Springmvc 日常開發Spring&Springmvc遇到的

Solr學習筆記——導JSON數據

管理 app 可能 pen ges nali fromfile mit print 1.導入JSON數據的方式有兩種,一種是在web管理界面中導入,另一種是使用curl命令來導入 curl http://localhost:8983/solr/baikeperson/up

laravel框架的個人筆記

laravel框架的個人筆記具體安裝環境可更具最新版本的文檔來,一下內容 只是我代碼的一些操作demo ,是對文檔進行的個人筆記;//路由命名Route::get(‘admin‘,[‘as‘=>‘profile‘,function(){ echo route(‘profile‘); re

saltstack自動化運維工具搭建個人筆記

技術分享 install size 為什麽 數據 font status 程序包 -c 至於為什麽選擇saltstack,因為Puppet、Chef基於Ruby開發,而ansible、saltstack基於python開發,便於後期二次,良好的可移植性。 又,ansible

個人筆記】《知了堂》MySQL中的數據類型

屬性 med mysql 表示 time align mes fault key MySQL中的數據類型 1、整型 MySQL數據類型 含義(有符號) tinyint(m) 1個字節 範圍(-128~127) smallint(m)

MSDN 同步部分 個人筆記

終端 數值 通信 滿足 exec 英語 關於 ini ddr (在知乎看到輪子哥說,掌握了MSDN上的並發部分 和 線程與進程部分就可以掌握所有語言的多線程編程,我在網上翻了一下並沒有中文版,所以決定自己翻譯一下...) 目錄: 線程之間協同運行的方式有許多種,下面所述的函

flask個人筆記

mit 定義 clas 4.4 返回 設置 ati 列表 cal 1 flaskORM模型 1.1 pip install flask_sqlalchemy 1.2 flask_sqlachemy配置 MySQL - mysql://username:password@h

redis個人筆記

png syn 但是 結束 依賴 命令 bubuko post 啟用 一、開啟、關閉redis /etc/init.d/redis-server restart //重啟/etc/init.d/redis-server stop //關閉/etc/init.d/redi

個人筆記--->服務器篇

反向 his 緩存 group tor cer shu nag 無法解析 day 01環境: PC: eth0:192.168.4.100 代理: eth0:192.168.4.5 eth1:192.168.2.5

個人筆記---->mysql數據庫基本操作

stop root 表結構 nbsp my.cnf 個人筆記 設置 eat 使用 mysql數據庫服務操作 # systemctl start mysqld //啟動 # systemctl stop mysqld //停止 # systemctl res

javascript的發展及個人筆記

custom 它的 支持 解決 定義 bsp 連接 {} eve Node.js是一個Javascript運行環境(runtime),發布於2009年5月,由Ryan Dahl開發,實質是對Chrome V8引擎進行了封裝。Node.js對一些特殊用例進行優化,

.Net MVC個人筆記

log 方法 兩個 on() res 比較 fun 代碼 color   關於轉向的問題,目前知道的是Response.Redirect 和 location.href   我現在有兩個controller,Home和Test <h2>this is

python控制結構、叠代器和生成器(個人筆記

if while參考:https://docs.python.org/2.7/reference/compound_stmts.html#whilehttps://www.cnblogs.com/lclq/p/5586198.html (python的運算與表達式)https://www.zhihu.com/

彈性盒子的梳理 (個人筆記

只有一個 數字 tween nts strong www 進行 前行 倒序 1.誰是彈性盒,誰寫(一般是父元素)Display:box 如果不兼容寫:display:-moz-box Display:-webkit-box; Display:-o-box;

《數學之美》——第二章 個人筆記

term spa 高級 程序 chm 出現 信息 ont 飛機 第二章 自然語言處理——從規則到統計 這一章開頭這句話:字母,文字,數字是信息編碼的不同單位。任何一種語言都是一種編碼的方式,而語言的語法規則是編解碼的算法。我們表達一個意思要通過語言表達出來,就是用

《數學之美》——第一章 個人筆記

沒有 歧義 移動互聯網 style 情況 組成 進制 LV 讓我   數學之美 第一章 文字和語言 vs 數字和信息 1 信息 通信的原理就是這三個步驟,本質上是一致的,只不過今天的實現形態發生了變化。更技

《數學之美》——第五章 個人筆記

strong == 概率 上下 很多 alt 就是 相關 分享圖片 第五章 隱含馬爾可夫模型 1 通信模型 通信的本質是一個編解碼和傳輸的過程。 典型的通信系統: 包含雅格布森通信的六個要素:發送者(信息源),信道,接收者,信息,上下文和編碼。 其中S1,S2,S

RN個人筆記SectionListView

reac item mage wid native 個人筆記 enter btn OS import React, { Component } from ‘react‘; import { AppRegistry, StyleSheet, Tex

個人筆記--內存可見性和原子變量

ati 方法 發包 加鎖 lag 速度 簡單的 tac png jdk1.6以後提供了java並發包。 volatile與內存可見性: 例子: 結果: 結論: main()線程讀取到的td.isFlag並不是true。 這就涉及到了內存可見性問題。 具體原因: 重

個人筆記--多線程(鎖)

同步機制 由於 筆記 ted 名詞 string href 同步塊 重復執行 死鎖:就是同步方法中有同步代碼塊,或反之。 例子: public class DeadLock { public static String obj1 = "obj1"; pub