Y N SELECT * FROM adminuser #theJSON# #theJSON#
cfscript 随机打乱数组元素顺序
前段时间有遇到这样的一个需求,原本给定一个数组,比如是:
array = [‘1′,’2′,’3′,’4′,’5’]
现在需要把数组里所有元素的顺序随机打乱,于是自己写了一个算法,分享出来。
public array function sortQuestions( required array arrayOfQuesions){ LOCAL.arrayOfSortedQuestion = []; numOfQuestions = arrayLen(ARGUMENTS.arrayOfQuesions); for (i=1; i<=numOfQuestions; i=i+1) { if(i == numOfQuestions){ maxNum = 1; } else{ maxNum = numOfQuestions - i + 1; } pos = randRange(1, maxNum); arrayAppend(LOCAL.arrayOfSortedQuestion, ARGUMENTS.arrayOfQuesions[pos]); arrayDeleteAt(ARGUMENTS.arrayOfQuesions, pos); } return LOCAL.arrayOfSortedQuestion; } writeDump(sortQuestions(['1','2','3','4','5']));
执行一次得出的结果是:
jQuery HTML clone
有时候我们会有这样的需求:
在HTML页面中单击一个按钮,某处表格会增加一行新的内容
如果使用js直接串HTML,在js代码里就会显得很乱
那么我们就可以用到jQuery的clone方法了
Step 1. HTML代码中添加Template
[xhtml]

[/xhtml]
Step 2. JS中可以这样获取HTML Template,并替换内容追加到现有的HTML后
[js]
var emailItem = $($(“script.template”).html()).clone();
emailItem.attr(“id”, userId);
emailItem.find(“td.name”).text(userName);
emailItem.find(“td.email input”).val(userEmail);
$(“#email-selected”).append(emailItem);
$(this).closest(“tr”).fadeOut(1000, function() {
$(this).closest(“tr”).remove();
});
[/js]
分享一些好的技术学习站点
不知不觉,身后也跟了几个做IT的,每个人基础和天赋不一样,学习态度也不一样,所以掌握的技术深度自然也就不一样了。
我刚走出培训学校参加工作的时候,觉得自己什么都不是。害怕所有的即将到来的工作自己Hold不住,所以除了每天正常的工作外,还会抽出时间学习新的知识。ColdFusion、Oracle、jQuery也都是在这段时间学习并了解的。
然后就一直在Webtribe了,跟着Alan学习了许多新的开发技术(如OOP)和工具(如Git),但学到的远远不止这些了,对我来说都是一生的财富。
闲话不多说了,自己Bookmark的东西开始放出,以后还会随时更新。其实这些东西Google一下就能很方便的找到了。
学习站点:
- W3School:http://www.w3school.com.cn/
- 幕课网:http://www.imooc.com/
- Lynda.com:https://www.lynda.com/
- Treehouse:https://teamtreehouse.com
工具集:
- EverNote:https://evernote.com/
- GitHub:https://github.com/
- Bitbucket:https://bitbucket.org/
- JIRA:https://www.atlassian.com/software/jira/
技术类站点:
- CSDN:http://www.csdn.net/
- 开源中国:http://www.oschina.net/
官方API文档:
- jQuery API documentation:http://api.jquery.com/
- Grunt:http://www.gruntjs.net/
看来自己的Bookmark也需要整理一下了,后续还会再补充:)
常用的cfscript snippets
现在自己写CFML程序,除非老的代码修改,已经不再使用Tags,基本上是用Script了。
有时候花了很长时间在Google或Stackoverflow上查到的cfscript snippets,是已经用到了项目上,但是没有记录,可能过了有一段时间,再有用到这写cfscript snippets时,绞尽脑汁去回忆之前用在什么地方。
这样,挺浪费时间的,于是有想法在此Post里记录下,用到的时候就直接来这里Copy了。懒人么,就是这样:)
setting
setting enablecfoutputonly="true" requesttimeout="150" showdebugoutput="false";
param
param name="form.role" type="string" default="user";
directory
if(!directoryExists(filesDir)){ directory action="create" directory="#filesDir#"; } if(directoryExists(empFilesDir)){ directory action="delete" directory="#filesDir#" recurse="true"; }
transaction
transaction { try { // do something transaction action="commit"; } catch (any e) { writeDump(e); transaction action="rollback"; } }
query insert
queryObj = new query(); queryObj.setDatasource(request.dsn); queryObj.setName("qryName"); queryObj.setSQL(" INSERT INTO table_name ( name, age, status ) VALUES ( :name, :age, :status ) "); queryObj.addParam(name="name",value="#mid#",cfsqltype="cf_sql_varchar"); queryObj.addParam(name="age",value="#empId#",cfsqltype="cf_sql_integer"); queryObj.addParam(name="status",value="#status#",cfsqltype="cf_sql_varchar"); queryPrefix = queryObj.execute().getPrefix(); newId = queryPrefix.generatedKey; queryObj.clearParams();
query delete
queryObj.setName("deleteUser"); queryObj.setSQL(" DELETE FROM users WHERE id = :id "); queryObj.addParam(name="id",value="#id#",cfsqltype="cf_sql_numeric"); queryObj.execute(); queryObj.clearParams();
query update
queryObj.setName("updateTbl"); queryObj.setSQL(" UPDATE tbl SET page = :page, status = :status modified_date = GETDATE() WHERE id = :id "); queryObj.addParam(name="page",value="#form.page#",cfsqltype="cf_sql_numeric"); queryObj.addParam(name="status",value="#form.status#",cfsqltype="cf_sql_varchar"); queryObj.addParam(name="id",value="#form.id#",cfsqltype="cf_sql_numeric"); queryObj.execute(); queryObj.clearParams();
query select
queryObj.setName("getStuDtl"); queryObj.setSQL(" SELECT * FROM students WHERE id = :stu_id "); queryObj.addParam(name="id",value="#form.stu_id#",cfsqltype="cf_sql_integer"); qryStuDtl = queryObj.execute().getResult(); queryObj.clearParams();
coldfusion query of queries
queryObj.setName("getOldTeachers"); queryObj.setDBType("query"); queryObj.setAttributes(questions=qryAllTeachers); queryObj.setSQL(" SELECT * FROM qryAllTeachers WHERE age > :max_age ORDER BY id "); queryObj.addParam(name="max_age",value="55",cfsqltype="cf_sql_integer"); qryOldTeachers = queryObj.execute().getResult(); queryObj.clearParams();
Lucee Server Email 发送异常
前两天有客户提出最近自动发送Email的功能好像不是很稳定,很多次mail-to-list都接收不了邮件,我在本地也做了多次尝试,这里记录一下。
将SMTP设置成一个未知的Host,使用发送邮件时,程序中Catch不到任何异常。后来我就在\WEB-INF\lucee\logs\mail.log文件中查看有没有错误信息:
未知SMPT Server时,mail.log会记录如下信息:
"ERROR","Thread-186","04/08/2016","21:09:00","","mail;Unknown SMTP host: smtp.mail.test.com; nested exception is: java.net.UnknownHostException: smtp.mail.test.com;Unknown SMTP host: smtp.mail.test.com; nested exception is: java.net.UnknownHostException: smtp.mail.test.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1225):1225 at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:322):322 at javax.mail.Service.connect(Service.java:236):236 at lucee.runtime.net.smtp.SMTPSender.run(Unknown Source):-1 "
Email用户名或密码不对时,mail.log会记录如下信息:
"ERROR","Thread-182","04/08/2016","20:18:37","","mail;553 Mail from must equal authorized user ;553 Mail from must equal authorized user at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333):1333 at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906):906 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535):535 at lucee.runtime.net.smtp.SMTPSender.run(Unknown Source):-1 "
后来我打开Lucee的Web Administrator页面,进入Services – Tasks页面,就能看到type=mail的Task列表,这些都是自己发送异常的Email。Lucee会把这些发送异常的Email放在Task列表中,于第二天的那个时间再次尝试发送。
怎么判断浏览器是否是IE11
新建is_ie11.html,添加js代码如下:
console.log(navigator);
在IE11中打开这个文件,按下F12,看控制台里输出的userAgent为:
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:DOWNLOADED; rv:11.0) like Gecko
所以,我们可以这样判断浏览器是否是IE11
//jQuery var isIE11 = navigator.userAgent.test(/Trident.*rv[ :]*11\./); if(isIE11){ return true; } //js var ie11Regex = new RegExp("Trident.*rv[ :]*11\."); if(ie11Regex.test(navigator.userAgent)){ return true; }
Git 基本命令
查看Git全局设置:
git config -l
从远程仓库克隆项目到本地:
git clone https://github.com/sunpengcheng/my_blog.git /d/Projects/my_blog
查看远程仓库的fetch和push地址:
git remote -v
查看本地分支:
git branch
删除本地分支:
git branch -d xxxxx
查看远程分支:
git branch -r
删除远程分支:
git push origin :dev
jQuery Datepicker 开始日期不能大于结束日期
今天在测试Datepicker时,发现了如下情况,原代码是:
[js]
$(“#start-date”).datepicker({
changeMonth: true,
changeYear: true,
maxDate: “Now”,
onSelect:function(dateText,inst){
$(“#end-date”).datepicker(“option”,”minDate”,new Date(dateText);
}
});
[/js]
在IE11、Chrome、FF下,new Date(dateText)这种方式都是可以生成 Wed Mar 02 2016 08:00:00 GMT+0800 这样的标准时间。而到了IE8下却不能生成,出现了NaN。
原来是因为IE8不像IE11和Chrome及FF那样聪明,new Date()这个方法如果带参数初始化时,应该使用像new Date(yyyy,mm,dd)这样的标准格式才能生成日期;
所以代码改成了这样:
[js]
$(“#start-date”).datepicker({
changeMonth: true,
changeYear: true,
maxDate:”Now”,
onSelect:function(dateText,inst){
$(“#end-date”).datepicker(“option”,”minDate”,new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
}
});
[/js]
也会有同学有这样的需求,开始日期不能大于结束日期,于是就可以这样写了:
[js]
$(“#start-date”).datepicker({
changeMonth: true,
changeYear: true,
maxDate:”Now”,
onSelect:function(dateText,inst){
$(“#end-date”).datepicker(“option”,”minDate”,new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
}
});
$(“#end-date”).datepicker({
changeMonth: true,
changeYear: true,
maxDate:”Now”,
onSelect:function(dateText,inst){
$(“#start-date”).datepicker(“option”,”maxDate”,new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
}
});
[/js]
My first post
This is my first post.