2011年12月7日 星期三

字串切割遇到 "點" (period) 時會回應空陣列

參考資料:http://www.velocityreviews.com/forums/t139874-string-method-split-doesnt-work.html

如上述的連結回應所說,split() 函式裡面實際上用的是 regular expression
"." 在 regular expression 中是 metacharacter
所以必須改成以下的寫法才會有效果:

String string = "aaa.bbb";
String[] result = string.split("\\.");

2011年11月29日 星期二

Java 定時執行 (1)

Java 中要定時執行某個動作,有三種選擇:
1、Timer 和 TimerTask
2、ScheduledExecutorService
3、quartz 套件
原本我是用 1 的方法來實作定時執行,但後來遇到 Timer 的 thread 難以控制的問題
如果定時執行到一半突然必須強制關閉時,Timer 很難做到讓我找出它的 thread 並且關掉
在查了一些資料後看到這篇文章:Java Timer vs ExecutorService?
其中回應裡有一段「ScheduledThreadPoolExecutor can be configured with any number of threads. Furthermore, you have full control over created threads, if you want (by providing ThreadFactory)」
而 quartz 因為不明原因把網路上找到的 sample code 貼上去以後程式就爆了
而且有看到有文章說 ScheduledExecutorService 是比較底層的 API,雖然很多事情要自己做
但也因此能夠自己對 Thread 有比較完整的控制權
因此最後是決定改用 ScheduledExecutorService 來實作定時執行。

2011年11月16日 星期三

eclipse 更換不同編輯套件

在 eclipse 上安裝了 Aptana 套件,但是用 eclipse 開啟 html 或者 js 檔的時候
預設還是會用 eclipse 自己原生的 html editor
今天突然發現原來只要設定檔案關聯就好了!XD

Window → Preferences → General → Editors → File Associations
在上半部的框框中選擇要變更的副檔名
選定後下面的框框會列出可用的編輯器
可以把想要的編輯器設為預設(點右邊的 default),下次開啟時就會自動用指定的編輯器開啟了!

2011年11月4日 星期五

jQuery 讀取 JSONArray 的方法

一般透過 $.ajax 送 JSON 格式的資料給後端處理
後端回應一個 JSON 回來,都可以直接用 .xxx 來存取回應的 JSON
例如回應的 JSON 是 {"statuscode", 200}
可以直接用:

$.ajax({
  type: "GET",
  url: endpoint,
  contentType: "application/json",
  dataType: "json",
  success: function(data){
    consile.log("statuscode: " + data.statuscode);
  },
  error: function(){
    unblock(); // TODO
  }
});

這樣在 FireFox 的 FireBug 中就會跑出:「statuscode: 200」的記錄。

當回應的 JSON 是個巢狀的 JSON array 時,則處理方式稍微複雜一點點

2011年10月29日 星期六

jQuery validate 套件:觸發驗證的事件

jQuery validate 預設的事件很奇妙
使用者按過一次 submit 觸發驗證以後,再回去改欄位內容
欄位內容就會每次 onChange 的時候都會觸發驗證
但因為有時候驗證是要送 AJAX 去給伺服器檢查
我們就不會很希望使用者每按一個鍵都會送一次 request
這樣當使用者一多的時候,或者是有人開機器人在亂按時
伺服器有可能會被這些訊息塞爆掉....

jQuery validate 套件的多國語言:更換 message 內容

在我們的專案中,由於語言資料已經寫在特定的檔案內
因此似乎不適用 jQuery validate 套件內建的 localization 方法
(我查到的資料好像都是說要把 message 寫在指定的 message.js 裡?)

要讓 error message 跟著使用者選取的語言更換,容易想到的可能作法有三種:
1、更換語言時讓整個網頁重新整理。
2、更換語言時把 validate 套件的 message dictionary 內容置換掉。
3、重新初始化 validate 套件。

其中 1 被主管打槍,主管要求我們不准重新整理網頁
2 找不到方法...(其中 disctionary 這個概念是搜尋時看到有人這麼說的,實際上我原本一直以為 validate 套件是需要時即時去讀字串的)
3 就是本篇的重點了~雖然是個笨一點的方法,但總是能夠做到效果....

2011年10月26日 星期三

Runtime.exec 容易發生的問題

最基本大概就是執行 Runtime.exec 實際上回傳的是 Process 物件
要用 InputStream 之類的物件接下來再轉成 String 才能顯示。
其他可能的問題可以參考下面的連結!

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

2011年10月25日 星期二

JSP:檔案下載

先記一下相關網址:

 

其中第二個連結有提到設定 content length,也許可以解決 UrlConnection.getContentLength = -1 的問題?

2011年10月19日 星期三

Java 的多國語言:在 ResourceBundle 中使用絕對路徑

原本 ResourceBundle 是依照 package name 來做相對路徑的
不過在我們的專案中,因為 NAND 容量不夠,必須把資源檔放在別的地方
所以只能以絕對路徑去指定它的位置。

2011年10月3日 星期一

jQuery 表單驗證的常見錯誤

這是我自己在放 validate 時沒效果,花了很多時間 debug 以後發現的幾種蠢原因...

1、$(" ").validate 必須放在 $(function(){ .... }); 內,例如:

$(function(){
 $(" ").validate( .... );
}

放在 $(function() { }); 之外的話會因為沒有被初始化,所以不會真的生效,按下 submit 按鈕就會變成沒有指定 method 和 target 的 submit 了。

2、頁面要引用 jquery.validate.js。有時候讀不到語言檔好像也可能是因為忘了引用函式庫的關係。

3、輸入的欄位們跟 submit 按鈕必須夾在 <form> .... </form> 之間。這其實我不是非常確定,但之前測試時 submit 放在 </form> 之後就沒辦法觸發 $("form").submit() 了,所以自然也不會跳進驗證。

4、變數名稱記得改.................因為驗證的程式碼常常是複製貼上的!XD

5、validate 套件看的是 name 屬性,所以需要被驗證的欄位一定都要有 name 屬性。

6、validate 觸發方法是表單被送出 (submit) 的時候觸發,所以如果 submit 按鈕是由 JavaScript 觸發,要記得加上 form 的 submit 事件 (例如 $("#form_name").submit(); )。

附帶基本使用教學:jQuery教學-jQuery.validate萬用表單驗證元件直接套用