筆記 - 換 TimeZone 就自動算當地時間
public class TestTime {
public static void main(String[] args) {
TimeZone currentTZ = TimeZone.getDefault();
TimeZone tz = TimeZone.getTimeZone("America/Chicago");
TimeZone.setDefault(tz);
System.out.println(Calendar.getInstance().getTime());
TimeZone.setDefault( currentTZ );
System.out.println(Calendar.getInstance().getTime());
}
}
Posted at 01:02上午 十一月 16, 2008 by shooeugenesea in Java | 迴響[0]
JavaScript - expression
var testb = false;
if ( testb )
alert( 'if testb 1' )
if ( testb )
alert('if testb 2');
else
alert('else');
function test() {
var q = [ 'abc', 'bcd', 'test', 'a' ];
var v = 'testa';
switch ( v ) {
case 1 :
alert( 1 );
break;
default :
alert( 'this is default option' );
case 'a' :
alert( 'a' );
break;
case 'ab' :
alert( 'ab' );
break;
case q[0] :
alert( q[0] );
break;
case q[2] + q[3] :
alert( 'q2 + q3');
break;
}
}
function test() {
var obj = { a:'abc', b:true, c:123 };
for ( var propName in obj ) {
alert( propName + " : " + obj[propName] );
}
}
function test() {
var obj = { a:'abc', b:true, c:123 };
var i = 0;
var cloneObjPropNames = new Array();
for ( cloneObjPropNames[i++] in obj ) {
alert( 'clone obj propName : ' + cloneObjPropNames[i - 1] );
}
alert( cloneObjPropNames );
}
function test() {
var obj = { a:'abc', b:true, c:123 };
for ( var propName in obj ) {
delete obj.b;
obj.d = 'ddd';
alert( 'd' in obj );
alert( propName );
}
}
function TestObj() {
var a = 0; // 不被列舉
var b = 1; // 不被列舉
function c() {} // 不被列舉
TestObj.prototype.d = 2; // 會被列舉
TestObj.prototype.e = function() {} // 會被列舉
}
function test() {
Date.prototype.toString = function() {
return 'custom toString';
}
Date.prototype.custom = function() {
return 'custom';
}
for ( var propName in new Date() ) {
alert( propName ); // 除 custom function 外通通沒列舉 (包括 toString 也沒列舉)
}
for ( var propName in new TestObj() ) {
alert( propName );
}
}
function test() {
a :
for ( var i = 0; i < 5; i++ ) {
alert( 'a' );
b :
for ( var j = 0; j < 5; j++ ) {
if ( i == 2 ) {
continue a;
}
}
}
}
function test() {
for ( var i = 0, b = 'a', c = true; i < 5; i++, b+='b', c = !c ) {
alert( 'i=' + i + ',b=' + b + ',c=' + c );
}
}
i = 1;
var j = 0;
function test() {
alert( 'i' in window ); // true
alert( 'j' in window ); // true
delete i;
delete j;
alert( 'i' in window ); // false
alert( 'j' in window ); // true
}
function test() {
alert( r ); // 顯示 function 的內容
var r = '2';
alert( r ); // 顯示 2
function r() {
return '1';
}
alert( r ); // 顯示 2
}
function test() {
try {
while( true ) {
try {
throw new Error( 'something wrong' );
} catch (error) {
alert( 'inner error : name=' + error.name + ', message=' + error.message );
break;
} finally {
alert( 'inner finally' );
}
}
} catch (error) {
alert( 'outer error : name=' + error.name + ', message=' + error.message );
} finally {
alert( 'outer finally' );
}
}
function test() {
for ( var i = 0; i < 10; i++ ) {
try {
alert( 'i = ' + i );
if ( i < 5 ) {
throw new Error( ' eight ' );
}
} catch (error) {
alert( error );
} finally {
// 因為這行所以只會 alert 一次還有一次 error
break;
}
}
}
Posted at 12:48上午 十一月 16, 2008 by shooeugenesea in JavaScript | 迴響[0]
JavaScript - variable, operator and operand
var v = 'global variable';
window.onload = function() {
alert( v ); // undefined
var v = 'local variable';
alert( v ); // local variable
}
alert( v ); // 先執行, 印出 global variable
| + | 加法 |
如果其中一個運算元是字串, 另一個就也會轉字串, 如 alert( 5 + '6' ); 會印出 '56'. 為什麼加號遇到字串就不算數字結果而是字串串起來是因為 + 的字串運算元優先權大於數字運算元, 所以 '1' + '2' = '12'. 另外 + 運算子是由左到右, 所以 1 + 2 + 'test' = '3test' 而 'test' + 1 + 2 = 'test12' |
| = | 指定運算子 | = 是由右向左的結合性, 總之就是又變的值為主, 目前一直是這樣. |
| += | 加並指定 | += 除了可計算數字以外還可用在字串上 |
| - * % | 減法 乘法 求餘數 | 如果運算元不是數字就會被轉成數字 |
| - + | 減號加號 |
放在運算元之前會把運算元轉數字, 如果轉不了會變 NaN 例如本 alert( +'100' ); 會印出 100, alert( - '100b' ); 會印 NaN
function TestObj() {
TestObj.prototype.valueOf = function() {
return 5;
}
}
window.onload = function() {
alert( + new TestObj() ); // 印出 5
alert( - new TestObj() ); // 印出 -5
}
|
| / | 除法 | 因為 JavaScript 都是浮點數, 所以 5 / 2 = 2.5, 5 / 0 = Infinity, 0 / 0 = NaN |
| delete | 刪除屬性定義 | |
| typeof | 傳回資料型態 |
function MyObj() {}
function test() {
alert( 'number' == typeof(123) );
alert( 'boolean' == typeof(true) );
alert( 'object' == typeof(new MyObj()) );
alert( 'object' == typeof(null) );
alert( 'string' == typeof('teststring') );
alert( 'function' == typeof(test) );
alert( 'undefined' == typeof(abc) );
}
|
| new | 建立物件 | 除了可以 new Object() 以外, 最特別的就是如果建構子不用參數, 可以不用括號. 比方說
function MyObj() {
MyObj.prototype.toString = function() {
return 'this is MyObj';
}
}
function test() {
alert( new MyObj );
}
|
| delete | 刪除屬性, 變數或陣列 |
var a = 0;
b = 1;
function test() {
alert( a ); // 0
alert( b ); // 1
alert( delete a ); // false
alert( delete b ); // true
alert( a ); // 0
alert( b ); // runtime error because b is not defined
}
|
| void | 回傳 undefined | 如果需要一個運算式產生額外作用又不希望顯示結果就可以用 void
<a href='javascript:void window.open();'>Test</a>
|
| instanceof | 撿查物件型態是否為特定型態 | 像在 java 一樣使用
function TestObj() {}
function test() {
var a = new TestObj();
alert( a instanceof TestObj );
}
|
| && | AND | 左右兩個運算元都要 true 才回傳 true. 如果左邊的運算元為 false 就直接回傳左邊的值, 否則就回傳右邊運算元的值
alert( 'abc' && new Date() ); // alert new Date().toString()
alert( 'abc' && null ); // alert null
alert( undefined && true ); // alert undefined
|
| || | OR | 兩個運算元只要有一個為 true 就回傳 true 的那個
alert( 'abc' || new Date() ); // alert 'abc'
alert( 'abc' || null ); // alert 'abc'
alert( undefined || true ); // alert true
|
| | | NOT | 就是變成布林的相反值, 有個特別的用法就是連續兩個 ! 就可以把值換成原來的布林值
alert( !!'abc' ); // alert true
|
| 位元運算子 |
|
|
| & | AND | 如果兩個位元都是 1 就回傳 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number( 9 & 6 ).toString(2) ); // alert 0
alert( Number( 9 & 1 ).toString(2) ); // alert 1
|
| | | OR | 只要有一個是 1 結果就是 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( 9 | 6 ).toString(2) ); // alert 1111
alert( Number( 9 | 1 ).toString(2) ); // alert 1001
|
| ^ | XOR | 兩個一樣為 0 不一樣為 1
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( 9 ^ 6 ).toString(2) ); // alert 1111
alert( Number( 9 ^ 1 ).toString(2) ); // alert 1000
|
| ~ | NOT | 把位元變成相反, 1 -> 0, 0 -> 1.
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(1).toString(2) ); // alert 0001
alert( Number( ~9 ).toString(2) ); // alert 0110
alert( Number( ~6 ).toString(2) ); // alert 1001
alert( Number( ~1 ).toString(2) ); // alert 1110
|
| << | 位元左移 | 移動的位元必須在 0 - 31 個, 如果超出 31 就取 31 的餘數
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(-10).toString(2) ); // alert -1010
alert( Number( 9 << 2 ).toString(2) ); // alert 100100
alert( Number( 6 << 3 ).toString(2) ); // alert 110000
alert( Number( -10 << 5 ).toString(2) ); // alert -101000000
|
| >> | 有號位元右移 | 有號就是說位元往右移, 如果原本的數是正號就補 0, 負號就補 1.
alert( Number(9).toString(2) ); // alert 1001
alert( Number(6).toString(2) ); // alert 0110
alert( Number(-10).toString(2) ); // alert -1010
alert( Number( 9 >> 2 ).toString(2) ); // alert 10
alert( Number( 6 >> 3 ).toString(2) ); // alert 0
alert( Number( -10 >> 10 ).toString(2) ); // alert -1
|
| >>> | 無號位元右移 | 和 >> 一樣, 差別是都補 0 |
| in | 撿查屬性是否存在 | 覺得這很有用, 可以先檢查有沒有某個屬性再做動作, 很適合 function 對未知型態的參數做動作之前預先處理以防錯誤發生
function test() {
var o = { a : 1, b : 2 };
alert( 'a' in o ); // true
alert( 'c' in o ); // false
}
|
| == | 傳回是否相等 |
|
| === | 傳回是否相同 | |
Posted at 02:44上午 十一月 15, 2008 by shooeugenesea in JavaScript | 迴響[0]
JavaScript - 基本的資料型態
// 一般的 parseInt, parseFloat
alert( parseInt('5 anc') ); // 5, 就是數字之後的單位會被忽略
alert( parseInt('0xFF') ); // 255
alert( parseFloat( '123.45 abcc' ) ); // 123.45 就是數字之後的單位會被忽略
alert( parseFloat( '1.23e5' ) ); // 123000
alert( parseFloat('12.23') ); // 12.23
// parseInt 可指定基數 (parseFloat 就不行)
alert( parseInt('101', 2) ); // 5
alert( parseInt('ff', 16) ); // 255
alert( parseInt('0123456', 10) ); // 123456
// 數字之前有非數字字串就不能轉換成功
alert( parseInt('$100') ); // NaN
alert( parseFloat('$100') ); // NaN
// Boolean to Number
alert( Number(true) ); // 1
alert( Number(false) ); // 0
// Boolean to String
alert( String(true) ); // 'true'
alert( String(false) ); // 'false
// Object to Boolean
alert( Boolean(new Object()) ); // true
alert( Boolean(null) ); // false
alert( Boolean(Number(0)) ); // false
alert( Boolean(Number(NaN)) ); // false
// 一般的宣告方式
function cal(a) {
return a + a;
}
// function literal 或稱 lambda function
var cal = function(a) {
return a + a;
}
// 用字串組成 function
var cal = new Function( 'a', 'return a + a' );
var objA = new Object();
objA.x = 1;
objA.y = 2;
alert( objA.x ); // 1
alert( objA['x'] ); // 1
alert( objA['y'] ); // 2
var A = { name : 'A' };
alert( A.name ); // A
var B = {
name : 'B',
children : {
C : { name : 'C' },
D : { name : 'D' }
}
};
alert( B.name );
alert( B.children.C.name ); // C
var E = {
name : 'E',
'F' : {
name : 'FF'
}
};
alert( E.F.name ); // FF
var TestO = function() {
TestO.prototype.toString = function() {
return 'This is toString of TestO';
}
TestO.prototype.valueOf = function() {
return 100;
}
}
window.onload = function() {
alert( new TestO() ); // 'This is toString of TestO'
alert( new TestO() + 50 ); // 150
}
var a1 = new Array();
a1[0] = 'a';
a1[1] = 1.2;
a1[2] = true;
a1[3] = { name : 'a3' }
a1[5] = 'a5'
alert( a1[3].name ); // a3
alert( a1[4] ); // undefined
var a2 = new Array( 'a', 1.2, true, {name : 'a3'} );
alert( a2[3].name ); // a3
var a3 = new Array(10); // 建立長度 10 的陣列
var a4 = [ 'a', 1.2, true, {name : 'a4'} ];
alert( a4[3].name ); // a4
var a5 = [ [1,2,3], ['a','b'], [] ];
alert( a5[1][0] ); // a
alert( null == undefined ); // true
alert( null === undefined ); // false
alert( new Date() ); // today
alert( new Date(2008, 10, 17) ); // 2008/11/17
var someD = new Date();
someD.setFullYear( someD.getFullYear() + 1 );
alert( someD ); // today add one year
alert( someD.toLocaleDateString() ); // 顯示區域的時間, 如 2008年11月9日
alert( 'abcdefghijklmnopqrstu'.substr(1, 5) );
alert( true.toString() );
alert( 123.45678.toFixed(2) );
alert( new Object('te') + new Object('st') ); // test
alert( !new Object(true) ); // false
alert( new Object(1) + new Object(2) ); // 3
var TestObj = function() {
TestObj.prototype.test = function() {
alert( 'you are calling test' );
}
}
window.onload = function() {
var t = new TestObj();
t.test();
eval( 'new TestObj().test()' ); // alert
eval( 't.test()', t ); // alert
eval( new String('t.test()'), t ); // do nothing..
}
var b = new Boolean( false );
alert( b ); // false
alert( Boolean( b ) ); // true
function TestObj() {}
var t = new TestObj();
alert( 5 - t ); // 沒有實做 valueOf 和 toString, 所以 t 會取得 '[object Object]' 的字串, 5 - '[object Object] 就因為不是數字而印出 'NaN'
TestObj.prototype.toString = function() {
return '6';
}
alert( 5 - t ); // 實做了 toString, 但沒有 valueOf. 所以 t 會在發現 valueOf 沒有回傳基本值之後去取 toString, 就是實做回傳的 '6'. 因為 '6' 可以直接轉成數字, 所以這行程式就印出 -1
TestObj.prototype.valueOf = function() {
return 7;
}
alert( 5 - t ); // 實做了 valueOf, 所以直接取得 valueOf 的回傳值就能計算了, 最後印出 -2
window.onload = function() {
function TestObj() {}
TestObj.prototype.valueOf = function() {
return '1';
}
TestObj.prototype.toString = function() {
return '2';
}
var t = new TestObj();
alert( t ); // 直接呼叫 toString -> 2
alert( 1 + t ); // 加號所以呼叫 valueOf, 但是回傳字串, 變 11
alert( 1 - t ); // 減號所以呼叫 valueOf, 1 - 1 = 0
TestObj.prototype.valueOf = function() {
return 1;
}
alert( 1 + t ); // 加號所以呼叫 valueOf, 回傳數字 1 所以結果變 2
}
function TestObj() {
this.a = 100;
this.addA = function( a ) {
this.a = this.a + a;
}
this.getA = function() {
return this.a;
}
}
function changeInsA( insA ) {
insA = new TestObj();
alert( insA.getA() ); // 100
}
function testCalByRef( insA, valA ) {
insA.addA( valA );
}
function testCallByVal( a, b ) {
a = a + b;
}
window.onload = function() {
var a = 0;
var b = 1;
testCallByVal(a, b);
alert( a ); // call by value, 所以 a 沒改變, 仍為 0
var c = new TestObj();
alert( c.getA() ); // 100
testCalByRef( c, 5 );
alert( c.getA() ); // call by reference, 所以 c.a 從 100 變成 105, 也不用拿變數去接
changeInsA( c );
alert( c.getA() ); // 雖然在 changeInsA 中傳過去的變數被改成新的 TestObj 但 c 變數的 instance 仍存在, 所以 105 不變
}
function compareStr( strA, strB ) {
return strA == strB;
}
window.onload = function() {
var a = new String('hello');
var b = new String('hell');
var c = new String('o');
alert( compareStr( a, b + c ) ); // true
alert( compareStr( b, a.substr(0, 4) ) ); // true
}
Posted at 01:21上午 十一月 10, 2008 by shooeugenesea in JavaScript | 迴響[0]
好文推薦 - ScalableIcon Overview & 堅持與固執
Posted at 01:38上午 十一月 05, 2008 by shooeugenesea in article | 迴響[0]
好文推薦 - Performing Inserts, Updates, and Deletes (with NetBeans and JSF1.2)
最近常聽到 .Net 的 CRUD 和 DB 橋接做得多快又多快...
不以為然之餘, 剛好看到有這篇文章.
Performing Inserts, Updates, and Deletes
Posted at 12:08下午 十一月 01, 2008 by shooeugenesea in article | 迴響[0]
CSS - Some notes
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>TEST</title>
<style type="text/css">
pre {
background-color : yellow;
}
</style>
</head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>TEST</title>
<link type="text/css" rel="stylesheet" href="TestXHtml.css" />
</head>
body {
font-size : 10px;
}
/* 一次指定兩個 tag 的效果 */
h1, h2 {
color : gray;
}
/* p tag 如果指定 class 為 classA 就會使用此效果 */
p.classA {
font-size : 10px;
border-width : thin;
border-style : solid;
border-color : #007e7e;
}
/* 任何的 tag 只要 class 為 classB 就使用此效果 */
.classB {
font-size : 20px;
padding-top : 120px;
padding-right : 20px;
padding-bottom : 20px;
padding-left : 20px;
}
如果一個 p tag 宣告
<p class="classB classA">
TEST TESTTEST TESTTEST TESTTEST TEST
</p>
這樣 p tag 同時會有 classA 與 classB 的效果. 不過 font-size 會符合 classB 的效果, 這是因為 classB 比較晚宣告.
<p id="testid">
TEST TESTTEST TESTTEST TESTTEST TEST
</p>
則透過使用 #
/* 不論什麼 tag 只要 id 是 testid 都套用此效果 */
#testid {
font-size : 10px;
}
/* tag p 的 id 是 testid 就套用此效果 */
p#testid {
font-size : 20px;
}
都可以拿來指定 testid 這個 p tag.
/* div tag 下的 p tag 下的所有 blockquote tag 子孫都套用此效果 */
div p blockquote {
font-size : 100px;
}
/* div tag 下的所有 p tag child 都套用此效果 */
div p {
font-size : 100px;
}
/* testid 這個 id 下的所有 p tag 子孫都套用此效果 */
#testid p {
font-size : 100px;
}
/* 只有 testid 這個 id 下的 p tag child (不包括所有子孫, 只有直系 child)套用此效果 */
#testid>p {
font-size : 100px;
}
/* 原本的屬性 */
.classA {
border-width : thin;
border-style : solid;
border-color : #007e7e;
}
/* 可以寫成這樣, 不用管順序 */
.classB {
border : thin solid #007e7e;
}
/* 如果有 top bottom 之類的, 就已上右下左為順序 */
/* 上 0px, 右 10px, 下 20px, 左 30px */
.classC {
padding : 0px, 10px, 20px, 30px;
}
/* 下右下左都一樣, 就寫一個即可 */
/* 四面都 100px */
.classD {
padding : 100px;
}
/* 上下一樣, 左右一樣. */
/* 上下為 10px, 左右 20px */
.classE {
padding : 10px, 20px;
}
/* 字型速記的順序 : font : font-style font-variant font-weight font-size/line-height font-family */
/* 字型速記 optional 的項目有 font-style font-variant font-weight */
/* 連結原本的顏色為藍色 */
a:link {
color : blue;
}
/* 拜訪過的連結是灰色 */
a:visited {
color : gray;
}
/* 滑鼠在上方時呈現綠色 */
a:hover {
color : green;
}
/* id 為 testid 的 tag 滑鼠滑過連結時呈現黃色 */
#testid a:hover {
color : yellow;
}
/* grade : 1 */
h1 {
color : red;
}
/* grade : 11 */
h2.myClass {
color : red;
}
/* grade : 100 */
#testid {
color : red;
}
/* id 為 testid 的 div 元素會浮動到畫面右邊, 其下方的元素會自動往上補又不會蓋掉這個 div */
div#testid {
width : 300px;
background-color : lightblue;
float : right;
}
/* 這樣 testid2 的右邊不會因為 testid 浮動到畫面右邊導致 testid2 的內容被擠壓到.
* testid2 會被擠到 testid 下方 */
div#testid2 {
clear : right;
}
div#testid {
width : 35%;
background-color : lightblue;
float : right;
}
/* margin-left 和 margin-right 設定為 auto 可使這個 div 保持在畫面中間 */
div#allContent {
width : 800px;
margin-left : auto;
margin-right : auto;
}
/* 這樣會底色黃色出現在離頂端 200px 離左方 200px 的位置 */
div#anywhere {
background-color : yellow;
position : absolute;
width : 400px;
top : 200px;
left : 200px;
}
/* 這兩個 div 可看出 : 重疊的時候 anywhere1 會被 anywhere2 蓋過去 */
div#anywhere1 {
position : absolute;
background-color : yellow;
width : 400px;
top : 10%;
right : 20%;
z-index : 10;
}
div#anywhere2 {
position : absolute;
background-color : blue;
width : 200px;
top : 20%;
right : 20%;
z-index : 20;
}
/* HTML */
<div id="outer">
<p>
...some content
</p>
<div id="inner">
<p>
anywhere anywhere anywhere anywhere anywhere anywhere
anywhere anywhere anywhere anywhere anywhere anywhere
</p>
<p>
anywhere anywhere anywhere anywhere anywhere anywhere
anywhere anywhere anywhere anywhere anywhere anywhere
</p>
</div>
<p>
...some content
</p>
</div>
/* CSS */
div#outer {
background-color : yellow;
position : absolute;
top : 100px;
left : 100px;
width : 400px;
}
div#inner {
background-color : green;
position : absolute;
top : 100px;
left : 100px;
width : 100px;
z-index : 2;
}
/* outer 會固定在離瀏覽器頂端 100px 與瀏覽器左邊離 -60px, 所以會被瀏覽器左邊擋掉一點 */
div#outer {
background-color : yellow;
position : fixed;
top : 100px;
left : -60px;
width : 400px;
}
/* outer 會跑到被擠壓過後的位置往下移 50px 往右移 20px */
div#outer {
background-color : yellow;
position : relative;
top : 50px;
left : 20px;
width : 400px;
}
li#a {
list-style-type : disc;
}
li#b {
list-style-type : circle;
}
li#c {
list-style-type : square;
}
li#d {
list-style-type : none;
}
li#e {
list-style-image : url( rock.jpg );
}
/* A.XXX
* B.XXX
* C.XXX
*/
li#f {
list-style-image : upper-alpha;
}
/* A.XXX
* XXX
* B.XXX
*/
li {
list-style-type : upper-alpha;
list-style-position : outside;
}
/* A.XXX
* XXX
* B.XXX
*/
li {
list-style-type : upper-alpha;
list-style-position : inside;
}
table#testid {
border : thin solid black;
border-spacing : 10px 30px;
}
/* 方法 1. 指定 border-spacing */
table#testid {
border : thin solid black;
border-spacing : 0px;
}
/* 方法 2. 指定 border-collapse */
table#testid {
border : thin solid black;
border-collapse : collapse;
}
table table th {
background-color : white;
}
<!-- 手攜裝置的 CSS -->
<link rel="stylesheet" type="text/css" media="handheld" href="forhandheld.css" />
<!-- 列印的 CSS -->
<link rel="stylesheet" type="text/css" media="print" href="forprint.css" />
Posted at 01:45下午 十月 31, 2008 by shooeugenesea in Others | 迴響[0]
好文推薦 - Ajax waiter & Add EL in project & Thread pool & caching, parallelism and scalability
Ajax Waiter
Adding EL support on your projects
Creating a NotifyingBlockingThreadPoolExecutor
Caching, Parallelism and Scalability
Using JSF and Flex Components Together
Posted at 01:19上午 十月 26, 2008 by shooeugenesea in article | 迴響[0]
SQL - 查詢每天最後一筆
create table TEST_DATE (
ID varchar(40),
EMP_ID varchar(40),
MY_DATE timestamp
)
然後我的需求是, 找出某個 EMP_ID 每天的最後一筆資料, 結果就是
select * from TEST_DATE d2 where d2.MY_DATE in (
select MAX_DATE from ( (
select DATE(d.MY_DATE) DAY, max(d.MY_DATE) MAX_DATE
from TEST_DATE d
where d.EMP_ID = '123456'
group by DATE(d.MY_DATE)
) T
) )
Posted at 09:23上午 十月 18, 2008 by shooeugenesea in Others | 迴響[2]
JavaScript - 非同步發 request
function AjaxRequest() {
var request = null;
if ( window.XMLHttpRequest ) {
try {
request = new XMLHttpRequest();
} catch (e) {
request = null;
}
} else if ( window.ActiveXObject ) {
try {
requet = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
request = null;
}
}
}
AjaxRequest.prototype.send = function (type, url, handler, postDataType, postData) {
if ( request == null ) {
return;
}
request.abort();
url += (( url.indexOf('?') > -1 ) ? "&" : "?") + "dummy=" + new Date().getTime();
try {
request.onreadystatechange = handler ;
request.open( type, url, true ); // always asynchronous (true)
if ( type.toLowerCase() == "get" ) {
request.send( null );
} else {
request.setRequestHeader("Content-Type", postDataType);
request.send( postData );
}
} catch ( e ) {
alert( "Ajax error communicating with the server.\n" + "Details: " + e );
}
}
AjaxRequest.prototype.getReadyState = function () {
return request.readyState;
}
AjaxRequest.prototype.getStatus = function () {
return request.status;
}
AjaxRequest.prototype.getResponseText = function () {
return request.responseText;
}
AjaxRequest.prototype.getResponseXML = function() {
return request.responseXML;
}
}
AjaxRequestServlet.java
...
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println(request.getParameter("test"));
}
...
AjaxRequestXMLServlet.java
...
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
StringBuffer sb = new StringBuffer();
sb.append( "" );
for ( int i = 0; i < 5; i++ ) {
sb.append( "" );
sb.append( "" + request.getParameter( "name" ) + i + " " );
sb.append( "" + request.getParameter( "age" ) + i + " " );
sb.append( " " );
}
sb.append( " " );
String xmlString = sb.substring(0);
logger.info( "xmlString=" + xmlString );
out.println( xmlString );
} finally {
out.close();
}
}
...
demo jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<script type="text/javascript" src="AjaxRequest.js"> </script>
<script type="text/javascript">
function testText() {
var ajaxRequest = new AjaxRequest();
var handler = function() {
if ( ajaxRequest.getReadyState() == 4 && ajaxRequest.getStatus() == 200 ) {
alert( 'response text = ' + ajaxRequest.getResponseText() );
}
}
var urlString = "${pageContext.servletContext.contextPath}/AjaxRequestServlet";
ajaxRequest.send("POST", urlString, handler, "application/x-www-form-urlencoded; charset=UTF-8", "test=" + document.getElementById('personName').value);
}
function testXML() {
var ajaxRequest = new AjaxRequest();
var handler = function() {
if ( ajaxRequest.getReadyState() == 4 && ajaxRequest.getStatus() == 200 ) {
var responseXML = ajaxRequest.getResponseXML();
var names = responseXML.getElementsByTagName('name');
var ages = responseXML.getElementsByTagName('age');
var context = document.getElementById('personContexts');
clearElmt( context );
if ( names.length == ages.length ) {
for ( var i = 0; i < names.length; i++ ) {
var nameText = document.createTextNode( elmtToText(names[i]) );
var ageText = document.createTextNode( elmtToText(ages[i]) );
var br = document.createElement("br");
context.appendChild( nameText );
context.appendChild( ageText );
context.appendChild( br );
}
}
}
}
var urlString = "${pageContext.servletContext.contextPath}/AjaxRequestXMLServlet";
var params = "name=" + document.getElementById('personName').value;
params += "&age=" + document.getElementById('personAge').value;
ajaxRequest.send("POST", urlString, handler, "application/x-www-form-urlencoded; charset=UTF-8", params);
}
function elmtToText(ele) {
var firstChildNodeValue = ele.firstChild.nodeValue;
return firstChildNodeValue ? firstChildNodeValue : "";
}
function appendElmtsToText(ele) {
var result = "";
if ( !ele ) { return; }
for ( var i = 0; i < ele.childNodes.length; i++ ) {
var child = ele.childNodes[i];
if ( child.nodeValue ) {
result += child.nodeValue;
} else {
if ( child.childNodes && child.childNodes[0].nodeValue ) {
result += child.childNodes[0].nodeValue;
}
}
}
return result;
}
function clearElmt( elmt ) {
if ( elmt == null ) { return; }
while ( elmt.firstChild ) {
elmt.removeChild( elmt.firstChild );
}
}
</script>
</head>
<body>
<h2>Hello World 2!</h2>
<input type="button" value="testText" onclick="testText();"/>
<input type="button" value="testXML" onclick="testXML();"/>
<input type="text" id="personName"/>
<input type="text" id="personAge"/>
<div id="personContexts"></div>
</body>
</html>
Posted at 01:56上午 十月 08, 2008 by shooeugenesea in JavaScript | 迴響[0]
JAI - 載圖轉 BufferedImage
JAI 載完圖是 PlanarImage, 可是一般我們處理的時候用 BufferedImage.
如果需要 JAI 幫忙載圖, 可是又想操作 BufferedImage 可以用下面的 method
private BufferedImage createBufferedImage() {
RenderedImage input = JAI.create("fileload", "test.tif");
BufferedImage bimg = new BufferedImage(input.getWidth(), input.getHeight(), BufferedImage.TYPE_INT_ARGB);
((Graphics2D) bimg.getGraphics()).drawRenderedImage(input, new AffineTransform());
bimg.getGraphics().dispose();
return bimg;
}
Posted at 02:49下午 十月 06, 2008 by shooeugenesea in Java Image | 迴響[0]
JavaScript - instance method, class owned instance method, class method
<!--
Document : TestObject
Created on : 2008/9/29, 上午 02:42:07
Author : Administrator
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript">
// add class owned instance method into standard class
Date.prototype.toClassOwnedInstanceString = function() {
return "[DateClassOwnedInstanceString date=" + this.toString();
}
// add class owned method into standard class
Date.toClassOwnedString = function(date) {
return "class owned string date=" + date;
}
function Blog(date, body, imgName) {
// instance property : all instances have different properties
this.date = date;
this.body = body;
this.imgName = imgName;
// class property : all instances have same class property
Blog.prototype.prototypeProperty = "prototype property";
Blog.classProperty = "classProperty";
// instance method : all instances have different functions (even if same context)
this.toInstanceString = function() {
return "[instanceString date=" + this.date + ",body=" + this.body + ",imgName=" + this.imgName + "]";
}
// class owned instance method : all instances have same class owned instance method, can access "this" instance
Blog.prototype.toClassOwnedInstanceString = function() {
return "[classOwnedInstanceString date=" + this.date + ",body=" + this.body + ",imgName=" + this.imgName + "]";
}
// class method : all instances has same class method, can't access "this" instance
Blog.toClassOwnedString = function(blog) {
return "[class-owned-string date=" + blog.date + ",body=" + blog.body + ",imgName=" + imgName + ",classProperty=" + Blog.prototype.classProperty + "]";
}
}
window.onload = function() {
var blog = new Blog(new Date("08/08/2008"), "testbody");
var blogWithImg = new Blog(new Date("08/09/2007"), "testbodywithImgName", "test.png");
alert( blog.toInstanceString() );
alert( blog.toClassOwnedInstanceString() );
alert( Blog.toClassOwnedString(blog) );
alert( new Date().toClassOwnedInstanceString() );
alert( blog.date.toClassOwnedInstanceString() );
alert( Date.toClassOwnedString(new Date()) );
alert( blogWithImg.toInstanceString() );
alert( Blog.prototype.prototypeProperty );
alert( Blog.classProperty );
}
</script>
</head>
<body>
<div></div>
</body>
</html>
Posted at 01:31上午 九月 30, 2008 by shooeugenesea in JavaScript | 迴響[0]
JavaScript - 操作 style, 排序, 自建物件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript">
function Blog(body, date) {
this.body = body;
this.date = date;
}
function getBlogs() {
return [
new Blog( "Hello1", new Date("08/19/2009") ),
new Blog( "Hello1", new Date("08/19/2008") ),
new Blog( "Hello1", new Date("08/19/2007") ),
new Blog( "Hello1", new Date("08/19/2006") ),
new Blog( "Hello1", new Date("08/19/2005") ),
new Blog( "Hello2", new Date("09/19/2004") ),
new Blog( "Hello3", new Date("10/19/2003") ),
new Blog( "Hello4", new Date("11/19/2002") )
];
}
function showBlog() {
var blogs = getBlogs();
blogs.sort(function(blog1, blog2) {
return blog1.date - blog2.date;
});
var blogBody = document.getElementById('blog');
for ( var i = 0; i < blogs.length; i++ ) {
var bodyPTag = document.createElement("p");
if ( i % 2 == 0 ) {
bodyPTag.style.backgroundColor = "#EEEEEE";
}
var strongTag = document.createElement("strong");
var dateStr = blogs[i].date.getMonth() + "/" + ( blogs[i].date.getDate() + 1 )+ "/" + blogs[i].date.getFullYear();
strongTag.appendChild(document.createTextNode(dateStr) );
bodyPTag.appendChild( strongTag );
bodyPTag.appendChild( document.createElement("br") );
bodyPTag.appendChild( document.createTextNode(blogs[i].body) );
blogBody.appendChild( bodyPTag );
}
}
window.onload = function() {
document.getElementById('showAll').onclick = function() {
showBlog();
}
}
</script>
</head>
<body>
<input type="button" id="showAll" value="Show All Blog Entries"/>
<div id="blog"></div>
</body>
</html>
用 innerHTML - 非 standard
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<script type="text/javascript">
function Blog(body, date) {
this.body = body;
this.date = date;
}
function getBlogs() {
return [
new Blog( "Hello1", "08/19/2008" ),
new Blog( "Hello2", "09/19/2008" ),
new Blog( "Hello3", "10/19/2008" ),
new Blog( "Hello4", "11/19/2008" )
];
}
function showBlog() {
var blogs = getBlogs();
var blogBody = "";
for ( var i = 0; i < blogs.length; i++ ) {
if ( i % 2 == 0 ) {
blogBody += "<p style='background-color:#EEEEEE'>";
} else {
blogBody += "<p>";
}
blogBody += "<strong>" + blogs[i].date + "</strong><br/>" + blogs[i].body + "</p>";
}
document.getElementById('blog').innerHTML = blogBody;
}
window.onload = function() {
document.getElementById('showAll').onclick = function() {
showBlog();
}
}
</script>
</head>
<body>
<div id="blog"></div>
<input type="button" id="showAll" value="Show All Blog Entries"/>
</body>
</html>
Posted at 06:24下午 九月 28, 2008 by shooeugenesea in JavaScript | 迴響[0]
計算讓圖片能夠等比縮小
public class TestFixedSize {
public static void main(String[] args) {
System.out.println(calFixedSize(new Dimension(200,200), new Dimension(1000,30)));
}
public static Dimension calFixedSize(Dimension fixedSize, Dimension originalSize) {
int fixedWidth = fixedSize.width;
int fixedHeight = fixedSize.height;
int imgWidth = originalSize.width;
int imgHeight = originalSize.height;
int resultWidth = 0;
int resultHeight = 0;
if (fixedWidth > imgWidth && fixedHeight > imgHeight) {
resultWidth = (int) imgWidth;
resultHeight = (int) imgHeight;
} else {
if (imgWidth > imgHeight) {
resultWidth = (int) fixedWidth;
resultHeight = (int) (fixedWidth * imgHeight / imgWidth);
} else {
resultWidth = (int) (fixedHeight * imgWidth / imgHeight);
resultHeight = (int) fixedHeight;
}
}
return new Dimension(resultWidth, resultHeight);
}
}
Posted at 06:26下午 九月 27, 2008 by shooeugenesea in Java Image | 迴響[0]
好文推薦 - 1.API Design-. 2.How to contribute-. 3.Developer Challenge
沒時間看, 可是感覺都是不錯的文章, 先記著.
Joshua Bloch: Bumper-Sticker API Design
You can contribute, and here’s how
Developer Challenge
Posted at 04:25下午 九月 24, 2008 by shooeugenesea in article | 迴響[0]