方法1(使用 seam api):
import org.jboss.seam.security.digest.DigestUtils;
public String hash(String password){
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法2(使用 Apache Jakarta 專案的 Commons codec):
import org.apache.commons.codec.digest.DigestUtils;
public String hash(String password){
//1.3版的只有提供 MD5、SHA 的編碼,如果想要完整的 SHA 編碼,請下載 1.4-snapshot
return new DigestUtils().md5Hex(password.getBytes("Big5"));
}
方法3(使用 java api + seam api):
import java.security.MessageDigest;
import org.jboss.seam.util.Hex;
public String hash(String password){
try{
//MessageDigest 可傳入的演算法參數有 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512
MessageDigest md = MessageDigest.getInstance("MD5");
//字串轉 byte 可指定不同的 charsetName,但其中的差異要傳入的 password 非單純的英數字組合才看的出來
md.update(password.getBytes("Big5"));
return new String(Hex.encodeHex(md.digest()));
}catch(Exception e){
throw new RuntimeException(e.getMessage());
}
}
2008年9月24日 星期三
2008年9月23日 星期二
[備忘記]Java內如何做四捨五入?
double number = 123.456123;
new BigDecimal(number, new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
結果:120.0
new BigDecimal(number, new MathContext(5, RoundingMode.HALF_UP)).doubleValue();
結果:123.46
這是因為粗體字的設定代表返回數字的精度位數,由準確返回值的最左端數字開始計算。
所以要動態的取得整數位數要另外設計:
public int getIntegerLength(double number){
String[] s = new Double(number).toString().split("\\.");
return s[0].equals("0") ? 0 : s[0].length();
}
new BigDecimal(number, new MathContext(getIntegerLength(number) + 2, RoundingMode.HALF_UP)).doubleValue();
如此粗體字部分就可以自行設定要取得小數點後幾位的四捨五入了。
new BigDecimal(number, new MathContext(2, RoundingMode.HALF_UP)).doubleValue();
結果:120.0
new BigDecimal(number, new MathContext(5, RoundingMode.HALF_UP)).doubleValue();
結果:123.46
這是因為粗體字的設定代表返回數字的精度位數,由準確返回值的最左端數字開始計算。
所以要動態的取得整數位數要另外設計:
public int getIntegerLength(double number){
String[] s = new Double(number).toString().split("\\.");
return s[0].equals("0") ? 0 : s[0].length();
}
new BigDecimal(number, new MathContext(getIntegerLength(number) + 2, RoundingMode.HALF_UP)).doubleValue();
如此粗體字部分就可以自行設定要取得小數點後幾位的四捨五入了。
2008年9月22日 星期一
[備忘記]如何設定 Tag 內的 binding 屬性?
binding 的設定要符合 JavaBean 的規格才可以正確運作。
在 JSF 的作法可為 #{myBean.argument}。
JavaBean規格:
1.public 的具體類別,且實作 Serialzable。
2.有 public 的 default constructor。
3.所有的類別屬性都要為 private。
4.有用的類別屬性要實作 setter / getter。
5.類別屬性與 setter / getter 符合命名規則。
在 JSF 的作法可為 #{myBean.argument}。
JavaBean規格:
1.public 的具體類別,且實作 Serialzable。
2.有 public 的 default constructor。
3.所有的類別屬性都要為 private。
4.有用的類別屬性要實作 setter / getter。
5.類別屬性與 setter / getter 符合命名規則。
標籤:
JavaBean,
JSF,
rich faces
[備忘記]rich:menuItem 的 action 內容自動異動??
我遇到一個怪現象
當我使用 Seam 來開發網站時
我有一個 menu.xhtml 的模板,用來放功能列表。其中的 rich:menuItem 元件 action="/special/A.xhtml" 屬性被我設定要跳轉的指定網頁
但是當我由A網頁,經由 jPDL 導向至B網頁後
原本模版內 rich:menuItem 的 action="/special/B.xhtml" 屬性居然自動變成 B 網頁的連結 !???
解答===================================================================================
應該是因為用了 jPDL 來作為網頁導向的緣故。
當某一個網頁被歸為 jPDL 管理後,
如果想要強制導向其他不存在於設定內的其他網頁,
就會發生錯誤。
至於導向後原先在模板內預先設定好的功能列表連結,
經 jPDL 導向後會自動改變是因為有設定 的緣故,
此設定會將所有連結隱藏起來。
當我使用 Seam 來開發網站時
我有一個 menu.xhtml 的模板,用來放功能列表。其中的 rich:menuItem 元件 action="/special/A.xhtml" 屬性被我設定要跳轉的指定網頁
但是當我由A網頁,經由 jPDL 導向至B網頁後
原本模版內 rich:menuItem 的 action="/special/B.xhtml" 屬性居然自動變成 B 網頁的連結 !???
解答===================================================================================
應該是因為用了 jPDL 來作為網頁導向的緣故。
當某一個網頁被歸為 jPDL 管理後,
如果想要強制導向其他不存在於設定內的其他網頁,
就會發生錯誤。
至於導向後原先在模板內預先設定好的功能列表連結,
經 jPDL 導向後會自動改變是因為有設定
此設定會將所有連結隱藏起來。
訂閱:
文章 (Atom)