部落客廣告聯播

2007年6月22日 星期五

Java FX in Eclipse

http://www.thescreencast.com/2007/05/running-your-first-javafx-program-in.html
推薦上面連結,介紹安裝java FX的eclipse plugin,還有基本使用方式。
是Flash 影片動態展示的喔!


-------------------------------------------------------------------------------------
The following Link is a blog containing demonstration video
about installing and basic usage of Java FX Eclipse plugin,
and the video is flash video format!

http://www.thescreencast.com/2007/05/running-your-first-javafx-program-in.html

2007年6月20日 星期三

Tomcat 6.0 Document中譯[2.建置]

[原文請見: http://tomcat.apache.org/tomcat-6.0-doc/setup.html]
[此中譯版本僅提供參考,請勿用於商業用途]


前言

此文件介紹在不同平台建置Tomcat的數種方式。請注意有些進階的建置議題位包含於此:完整套件(ZIP 檔案或tarball)包含一個名為RUNNINT.txt的檔案裡頭討論到這些進階的議題。如果您在下列資訊找不到答案,我們鼓勵您可以參考看看這個檔案。
Windows
在Windows可以使用Windows Installer很簡單的安裝好Tomcat。它的介面和運作叫好似精靈式的installer,只要填些重要的項目即可完成。



  • 安裝成一個「服務」: 不管選擇什麼安裝選項,Tomcat都將被安裝成一項 Windows NT/2k/XP的服務. 使用元件頁面上的核選框將服務設定成「自動」啟動,Tomcat就會在Windows啟動時自動啟用了。基於安全考量, 這項服務應該以擁有較少權限的獨立使用者身份執行 (請參閱Windows服務管理工具和其文件).

  • Java 位置: 這個installer將會使用系統登錄或是 JAVA_HOME環境變數來取得J2SE 5 JRE的路徑。

  • 系統匣圖示:當Tomcat以服務執行時, 不會有任何系統匣圖示。注意當選則在安裝結束後運行Tomcat,即使Tomcat以服務形式運作,系統匣圖示將會被使用。

  • 請參閱Windows服務 HOW-TO 得知如何管理以Windows NT形式運作的Tomcat

Installer將會建立允許及組態Tomcat的捷徑 。記得, Tomcat administration web application只有再Tomcat開著時才能運作。


Unix deamon


Tomcat藉由來在commons-daemon專案的jsvc工作,可以以daemon型式運作。jsvc原始碼tarball 已經包含在Tomcat的二進格式套裝裡面, 需要自行編譯。編譯jsvc 需要一個C ANSI 編譯器(像是 GCC), GNU Autoconf, and a JDK.


運行這個指令稿(script)前,JAVA_HOME 環境變數應該正確設置 JDK目錄。或者你也可以在呼叫 ./configure 指令稿時, 使用--with-java參數來指定JDK的目錄。像是這樣


./configure --with-java=/usr/java.


使用以下的命令就可以編譯好jsvc二進程式,編譯好的檔案位於 $CATALINA_HOME/bin 目錄。這裡會用到 GNU TAR ,CATALINA_HOME代表指向TOMCAT安裝目錄的環境變數。


請注意,在BSD系統上你應該使用GNU make(gmake)取代BSD原生的make。


從Jakarta Commons網站下載commons-daemon二進位套件 ,,jsvc.tar.gz 及 commons-daemon.jar放在$CATALINA_HOME/bin 目錄。
















    cd $CATALINA_HOME/bin

tar xvfz jsvc.tar.gz

cd jsvc-src

autoconf

./configure

make

cp jsvc ..

cd ..


Tomcat接著就可以使用下列指令以daemon型式執行。
















    cd $CATALINA_HOME

./bin/jsvc -cp ./bin/bootstrap.jar \

-outfile ./logs/catalina.out -errfile ./logs/catalina.err \

org.apache.catalina.startup.Bootstrap


jsvc 還有其他有用的參數,如-user能在daemon起始完成後切換到另一使用者帳號。這樣做的話可以以較少權限的使用者運行Tomcat同時還可以使用有權限的埠。 jsvc --help 將會得到完整的 jsvc使用資訊。還有一項比較特別,-debug 選項在運行jsvc時除錯很有用。


$CATALINA_HOME/bin/jsvc/native/tomcat.sh 這個檔案可以當作能在從/etc/init.d開機時自動啟動Tomcat的樣板檔。這個檔案是為Tomcat 4.1.x寫的,所以說需要對其修改,並將類別名稱BootstrapService改成Bootstrap


記得要將Commons-Daemon JAR檔案放在你的執行環境 這樣才能執行Tomcat。. Commons-Daemon JAR 檔案路徑在bootstrap.jar manifest的Class-Path那行,如果你遇到關於Commons-Daemon 類別ClassNotFoundException或是NoClassDefFoundError ,啟動jsvc時將Commons-Daemon JAR檔路徑放在-cp 參數裡。




Tomcat 6.0 Document中譯[1.簡介]

[原文請見: http://tomcat.apache.org/tomcat-6.0-doc/introduction.html]
[此中譯版本僅提供參考,請勿用於商業用途]

簡介
不管是系統管理員或是開發人員,在開始之前有些重要的資訊你必須要了解與熟悉。這份文件對於Tomcat容器的觀念及專有術語做了有用的介紹。比如說,當你需要幫助時,要到哪尋求協助等。
專有名詞
往後在閱讀這份文件,你將接觸到一些專有名詞。有些是Tomcat特有的,有些則是Servlet及JSP規格所定義的。
  • Context - 概括的說就是Web application
  • 專有名詞1 - 意義
  • 專有名詞2 - 意義
目錄及檔案
遍及整份文件,你會注意到有一堆參考$CATALINA_HOME變數。這個環境變數代表的是你安裝Tomcat的根目錄。
「這些資訊可在你的
$CATALINA_HOME/README.txt 檔案找到」代表的是請您找找您安裝的Tomcat跟目錄下的README.txt檔案。

還有一些主要與
$CATALINA_HOME有關聯的目錄:
  • /bin - 啟動、關閉和其他的指令稿(scripts)。*.sh 檔案(Unix系統) 的功能和同檔名的 *.bat files (Windows系統)相同。因為Win32 命令列模式缺少某些功能,所以有些而外的檔案在裡面。
  • /conf - 組態檔和相關的DTD。這裡最重要的檔案就是 server.xml。它是容器主要的組態檔。
  • /logs - 預設的日誌紀錄檔都擺在這裡。
  • /webapps - 這就是你放你的Web application的地方。

組態Tomcat
這節將介紹你組態容器的基本資訊。
所有在組態檔裡面的資訊都再啟動時被讀取,這代表所有對於組態檔的變更,都需要重新啟動容器。
哪裡尋求協助
當我們盡吾所能的使這份文件清楚易讀,我們可能還是會有些遺漏。下面提供一些網站及郵件列表,當你遇到問題時可尋得協助。
Tomcat6是新版本的Tomcat,請記得有些問題和解節方法可能因版本而異(現有主要為4.x及5.x版)。當你搜尋網站時,有些文件並不適用於Tomcat 6, 但可能能用於3.x, 4.x and 5.x版。用3.x及4.x版的方法對6版可能無法正常運作,主要在於server.xml檔案差異甚大。

  • 現行版文件 - 大部分的文件將列出可能潛在的問題。確切完整的閱讀相關文件將會節省你相當多的時間與力氣。別始終總是遍地的搜尋網路只為找出你要的某個答案。
  • 開發者所維護的Tomcat FAQ
  • Tomcat WIKI
  • jGuru
  • Tomcat郵件列表存檔 - 許多網站庫存有Tomcat 郵件列表. 因為這相連結經常換位置,所以請按這 Google到google搜尋
  • TOMCAT-USER 郵件列表, 可在這裡訂閱. 如果你得不到答覆,那麼有很有可能你的問題已經在在庫存的列表或其他FAQ有人回答過了。 雖然關於一般性的web application開發的問題 常被提問與答覆, 但請把焦點放在Tomcat特定的議題.
  • TOMCAT-DEV 郵件列表, 你可以在 這裡訂閱. 這個列表保留給開發Tomcat的討論使用. 關於Tomcat配置以及開發及運作tomcat時遇到的問題比較適合在TOMCAT-USER 列表內提問

最後,如果你認為有什麼應該要被包含近文件內,請在TOMCAT-DEV讓我們知道,或是寄封e-mail給文件的作者。

2007年6月18日 星期一

筆記:JSF

JSF下載網址:https://javaserverfaces.dev.java.net/

1. 架構概觀:


  • FaceServlet (javax.faces.webapp.faceServlet)

  • FaceContext (FaceServlet生成,裏頭包含了ServletContext、ServletRequest、ServletResponse)

  • LifeCycle (封裝在FaceContext裏頭的JSF請求主要交由LifeCycle經由六階段處理)

2. LifeCycle六階段:


  1. Restore Component Tree

  2. Apply Request

  3. Validation

  4. update Model

  5. Invoke application

  6. render response

參考圖片from IBM


從上圖可看到中間四個紅色的階段,代表這四個階段可產生事件,以進行處理。

3. JSF配置檔faces-config.xml:
  • JavaBean

  • Navigation

4. JSF支援兩種EVENT:
  • ActionEvent

  • ValueChangeEvent

5. 使用JSF所需jar:
  1. jsf-api.jar

  2. jsf-impl.jar

  3. jstl.jar

  4. standard.jar

  5. commons-beanutils.jar

  6. commons-digester.jar

  7. commons-logging.jar
若是JSF1.2版,則只要前四項,後面的3項commons已經包在jsf-impl.jar的com.sun.org.apache.commons套件中了。

6. JSF的JSP頁面引入自訂標籤庫:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

7. 所有的JSF標籤都要包在 <f:view>之間

8. JSF的HTML標籤包含四大類
  1. UIForm

  2. UIInput

  3. UIOutput

  4. UICommand

9. JSF Core核心標籤與事件有關的標籤:
  1. <f:actionListener>

  2. <f:valueChangeListener>

  3. <f:phaseListener>

10. 上列type為class的完整名稱,該類別必須實做javax.faces.event.AcionListener。
同的如果違valueChangeListenre則必須實做javax.faces.event.ValueChangeListener。

11.四個核心validator標籤

  1. <f:validator>

  2. <f:validateLength>

  3. <f:validateDoubleRange>

  4. <f:validateLongRange>

12.JSF API 介面:
  • javax.faces:

    • FactoryFinder:用來找所有JSF API裡指定的Factory,不會直接使用該類別

    • FacesException: RuntimeException的子類別,常會在我們JSF程式裡面throw該類實例


  • javax.faces.aplication:

    • NavigationHandler:處理頁面導覽。

    • Application:類似jsp裡的application,每個web application中只有一個,提供存放一些支援JSF的物件(如NavigationHandler)


  • javax.faces.component: 包含JSF標準UI組件的介面和類別

    • UIComponent:所有UI組件皆實做UIComponent


  • javax.faces.context:

    • FaceContext: 封裝了ServletContext、ServletRequest、ServletResponse等物件。

    • FaceContextFactory: 負責FaceContext物件的生成。

    • ExternalContext: 可用來取得ServletContext、ServletRequest、ServletResponse等物件。


  • javax.faces.convert: 包含了一堆轉換器的介面及類別

    • Converter: 所有自訂的轉換器都要實做Converter

    • ConverterException: 轉換錯誤時 ,要拋出這個例外


  • javax.faces.el: 包含用於處理JSF Expression language的類別及介面

    • ValueBinding: 相當重要,常在我們的JSF程式中使用,用來在程式中存取某個字串代表的EL


  • javax.faces.event: 事件處理所需的介面及類別

    • ActionEvent

    • ValueChangeEvent

    • FacesListener: 介面,被ActionListener及ValueChangeListener實做

    • ActionListener

    • ValueChangeListener

    • PhaseId: 包含了數個常數代表LifeCycle的六個階段,FacesListener有一個getPhaseId( )方法傳回的PhaseId將會指明這個Listener要在哪階段被使用

    • AbortProcessingException: 用來中斷當前事件處理


  • javax.faces.lifecycle:

    • Lifecycle: 處理JSF請求。

    • LifecycleFactory: 用來生成LifeCycle


  • javax.faces.model: 包含了一些Data Model介面及類別


  • javax.faces.render:

    • Render:負責把UI組件轉換成客戶端特定型式(如html)

    • RenderKit:Render實例的集合

    • RenderKitFactory


  • javax.faces.validator:

    • Valicator:介面

    • LengthValidator

    • LongRangeValidator

    • RequiredValidator

    • DoubleRangeValidator

    • StringRangeValidator


  • javax.faces.webapp

    • FacesServlet

    • UIComponentTag


13.一般不直接接觸ServletContext、ServletRequest、ServletResponse而是使用FaceContext及ExternalContext物件。



14.JSF每個JSP頁面都以一組component tree來表示。


15.JSF內通常不用jsp:useBean來與JavaBean互動,而是將JavaBean定義在facesConfig.xml設定檔內,並透過JSF EL或是ValueBinding類別來存取。



16.FacesContext物件內主要包含:

  1. Tree

  2. ExternalContext

  3. Message Collection

  4. Event object collection

  5. ResponseStream

  6. ResponseWriter

17.取得FacesContext:

  FacesContext fcontext = FacesContext.getCurrentInstance( );


18.取得component tree:

  fcontext.getTree( );

設定component tree:

  fcontext.setTree(TreeO);


19.將訊息推入facesContext物件裡的Message Collection:

  fcontext.addMessage(UIComponentO,MessageO);

取出Message collection裡所有訊息:

  fcontext.getMessages( ) ; ->會傳回Iterator物件

  fcontext.getMessages(UIComponentO);


20.將事件推入Event collection:

  fcontext.addFacesEvent(FacesEventO);

取出所有Event:

  fcontext.getFacesEvents( ) ;



21.取得與設定Locale:

  fcontext.getLocale( );

  fcontext.setLocale(LocaleO);


22.取得ExternalContext:

  fcontext.getExternalContext();

23. 使用ExternalContext取得ServletContext、ServletRequest、ServletResponse、HttpSession
  • eContext.getContext( );
  • eContext.getRequest( );
  • eContext.getResponse( );
  • eContext.getSession(boolean create);

24. 使用ExternalContext取得ServletContext所有Attribute的Name-value Map:
  • eContext.getApplicationMap( );

25. 使用ExternalContext取得session所有Attribute的Name-value Map:
  • eContext.getSessionMap( );

26. 使用ExternalContext取得request所有Attribute的Name-value Map:
  • eContext.getRequestMap( );

27. 使用ExternalContext取得ServletContext起始參數(Init parameter defined in web.xml):
  • eContext.getInitParameter(String name);
  • eContext.getInitParameterMap( ); //所有參數map

28. 使用ExternalContext取得request參數:
  • eContext.getRequestParameterMap( );
  • eContext.getRequestParameterValuesMap( ); //map value為字串陣列
  • eContext.getRequestParameterNames( ); //傳回Iterator

29. 使用ExternalContext取得header參數:
  • eContext.getHeaderMap( );
  • eContext.getHeaderValuesMap( ); //map value為Enumeration
30. 使用ExternalContext取得cookie:
  • eContext.getRequestCookieMap( ); //map value 為Cookie
31. 使用ExternalContext取得瀏覽器送出的Locale:
  • eContext.getRequestLocale( ); // map value為Locale
32. 使用ExternalContext取得當前WebApp名稱、頁面名稱:
  • eContext.getRequestContextPath( ); //傳回 /appName
  • eContext.getRequestPathInfo( ); //傳回 xxx.jsp
33. 使用ExternalContext取得指定網站目錄下的目錄及檔案列表:
  • eContext.getResourcePaths("/pathDir1"); //傳回Set,列出網站跟目錄下的pathDir1目錄下的目錄名及檔名。
34. javax.faces.tree.Tree代表一個component tree。前面有提過可使用FacesContext物件的getTree( )取得。
Tree物件的四個方法:
  1. getTreeId( );
  2. getRoot( );
  3. getRenderKitId( );
  4. setRenderKitId( );

35. 取得Application物件實例:
ApplicationFactory factory = (ApplicationFactory) FactoryFinder.getFactory( FactoryFinder.APPLICATION_FACTORY);
Application app=factory.getApplication( );

36. 使用Application及ValueBinding存取JavaBean:
ValueBinding vb=app.getValueBinding("someBean");
ValueBinding vb2=app.getValueBinding("someBean.someAttribute");

37. ValueBinding物件四個方法:
  1. getType(fContext );
  2. getValue( fContext);
  3. setValue( fContext);
  4. isReadOnly( fContext );

....未完待續



Tomcat 6.0 Document中譯[文件索引]

[原文請見: http://tomcat.apache.org/tomcat-6.0-doc/index.html]
[此中譯版本僅提供參考,請勿用於商業用途]

文件索引
簡介
此頁是
Apache Tomcat Servlet/JSP 容器文件捆包最上層起始點。
Apache Tomcat 6.0實做了 Java Community Process的Servlet 2.5和JavaServer Pages 2.1 規格,而且包含了許多附加的功能,使的Tomcat成為開發和部屬Web Applcation和Web Service的好用平台。
你可從左側的導覽清單沿下找到更詳細的有用文件。愈下層的文件就越詳細。

Apache Tomcat使用手冊
下列文件將協助您下載、安裝Tomcat 6,以及使用許多Tomcat的功能。
  1. 簡介 - 以高端檢視Apache Tomcat的概觀
  2. 建置 - 如何在各式各樣的平台安裝並執行Apache Tomcat
  3. 第一支web application - 簡介Servlet 2.4 Specification內所定義的web application的概念。包含你的web application原始碼樹狀結構的基本組成、web application封裝的結構以及web application部屬描述子 (/WEB-INF/web.xml)的介紹。
  4. 部屬器(Deployer) - 操作Apache Tomcat 部屬器來部屬、先期編譯(precompile)與驗證 web applications。
  5. 管理 - 在Apache Tomcat 仍在運作的情況下,操作管理器(Manager) web應用程式來部屬、卸載、重部屬。
  6. Realms與存取控制 - 描述如何組態 Realms (存放使用者帳號、密碼以及相關角色的資料庫)以供利用容器自管安全(Container Managed Security)的web applications 使用。
  7. 安全管理員 - 組套及使用Java 安全管理員以支援你的web application行為中細密的控制。
  8. JNDI資源 - 在供給各個web application使用的JNDI命名環境(JNDI naming context )組態標準及自訂的資源。
  9. JDBC 資料來源 - 利用DB連線集區(connection pool)組態一個JNDI資料來源。還有許多常用資料庫的範例。
  10. 類別載入- 關於在Tomcat內的類別載入資訊,包含要把你的程式類別放在哪裡才可用。
  11. JSPs - 關於Jasper組態的資訊,好比說JSP編譯使用。
  12. SSL - 安裝及組態SSL支援,好讓您的Apache Tomcat能夠處理使用https協定的請求.
  13. SSI - 在Apache Tomcat中使用伺服端包含。
  14. CGI - 在Apache Tomcat中使用CGI。
  15. 代理支援 - 組態Apache Tomcat能在代理伺服器後面運作 (或者是一個如同代理伺服器運作的網頁伺服器)。
  16. MBean 描述子 - 為自訂元件組態 MBean 描述子(descriptors)檔案 。
  17. 預設Servlet - 組態預設servlet以及自訂檔案列表型式。
  18. Apache Tomcat叢集 - 在Apache Tomcat環境啟用階段覆寫(session replication) 。
  19. 負載平衡- 組態、使用、並擴充負載平衡應用。
  20. 連接器(Connectors) - 連接器是Apache Tomcat和一般網頁伺服器整合的橋樑。
  21. 監控與管理 - 啟用 JMX 遠端支援並使用工具來監控管理Apache Tomcat。
  22. 日誌(Logging) - 組態Apache Tomcat日誌(logging)。
  23. Apache 可移植執行環境(Portable Runtime) - 使用APR提供較好的效能、穩定性,以及與原生伺服器技術有較好的整合。
  24. 虛擬主機(Virtual Hosting) - 在Apache Tomcat組態虛擬主機。
  25. 進階IO - 一般塊狀IO的可用擴充。
  26. 額外組件 - 取得額外可選用的組件。

2007年6月13日 星期三

讓lomboz及eclipse支援Tomcat 6 (Using Tomcat 6 in lomboz)

現在的lomboz最新是3.2.2版的,很遺憾不支援Tomcat 6。

不過若還是要用Tomcat 6的話,可以裝Sysdeo的tomcat plugin ,只不過裝好後要把原有的專案轉進新建的TOMCAT PROJECT類型專案,還有再JSP除錯只能到servlet層級,也就是說除錯是要在jsp編出來的servlet來點選中斷點,這是比較大的差別。

================================================================
The latest version of lomboz is version 3.2.2 , and by default don't support tomcat 6.

But if you wish to use tomcat 6 in your lomboz IDE , you can install Sysdeo tomcat plugin .
But the major difference is you can just debug your JSP in servlet level, that means you should select the break point in the java file which was compiled from its JSP file. And the other major difference should noticed is you should create a new Tomcat Project and import your original web application into it, it's all....

2007年6月11日 星期一

Tomcat 6.0.13 Release Notes 中記載的幾個重要項目

Tomcat 6.0.13 Release Notes 中記載的幾個重要項目

1. Tomcat 6需要再J2SE 5版本或以上才可以運作喔....
2. Tomcat 6.0 使用 Eclipse JDT Java compiler來編譯JSP,這代表你可以只安裝JRE而不用安裝JDK就可以跑Tomcat,當然也可以經由配置使用JDK來編譯JSP....
3. 標準安裝的Tomcat6會有下面幾「包」東西:
  • * annotations-api.jar (Annotations package)
  • * catalina.jar (Tomcat Catalina implementation)
  • * catalina-ant.jar (Tomcat Catalina Ant tasks)
  • * catalina-ha.jar (High availability package)
  • * catalina-tribes.jar (Group communication)
  • * commons-logging-api.jar (Commons Logging API 1.0.x)
  • * el-api.jar (EL 2.1 API)
  • * jasper.jar (Jasper 2 Compiler and Runtime)
  • * jasper-el.jar (Jasper 2 EL implementation)
  • * jasper-jdt.jar (Eclipse JDT 3.2 Java compiler)
  • * jsp-api.jar (JSP 2.1 API)
  • * servlet-api.jar (Servlet 2.5 API)
  • * tomcat-coyote.jar (Tomcat connectors and utility classes)
  • * tomcat-dbcp.jar (package renamed database connection pool based on Commons DBCP)
4. 接下來這項不大重要,因為4.12版開始預設就是這樣,不過還是提一下:
invoker servlet 預設不再開啟了。如果要開啟的話,可以編輯$CATALINA_HOME/conf/web.xml 把 "/servlet/*" servlet-mapping定義的註解拿掉,就可以了.

然後,還有去逛逛tomcat官方網站看看拉,有空再繼續做筆記。

javascript: 實用函數 判斷哪個radio選項被選取傳回其value

function getCheckedValue(radioObj)
{
if(!radioObj)
return "";
var radioLength = radioObj.length;
if(radioLength == undefined)
if(radioObj.checked)
return radioObj.value;
else
return "";
for(var i = 0; i < radioLength; i++)
{
if(radioObj[i].checked)
{
return radioObj[i].value;
}
}
return "";
}

javascript: document.getElementById與radio

這實在是一個沒有試過就不知道的問題。

在java script中如果使用document.getElementById(' rdoName ')來取得具有多個值的radio input物件,然後要用陣列取它得值,永遠只取的到最前一個元素的值,後面的都取不到。

然而使用formName.rdoName來參考到這個問件時,問題就解決了。

真怪................

順帶一提,checkbox也是一樣

javascript: 實用函數trim( )

去頭去尾留中間,跟尿療法一樣

function trim(stringToTrim)
{
return stringToTrim.replace(/^\s+|\s+$/g,"");
}

2007年6月9日 星期六

筆記:程式內組態log4j (Note: configure log4j in the code)

筆記:程式內組態log4j
組態配置log4j最常的方法,就是將log4j.properties檔案置放在class path中。
雖然在程式內配置log4j API通常比較不建議被採用(配置被寫死程式碼中),但有時還是有需要在程式中組態配置。
在上次的文章: 不只是System.out.print, 筆記: log4j 提到了log4j最重要的三樣東西:
  1. Logger --> 接收訊息
  2. Appender --> 寫訊息到特定目的
  3. Layout --> 用來表示訊息的格式
log4j.properties主要配置這三樣東西,想當然如果在程式中配置Log4j也相同的是對這三樣東西做配置囉。
以下的基本組態非常容易,只要簡單四步即可完成:
  1. Logger myLogger = Logger.getLogger( this.getClass() );
    myLogger.setLevel( Level.DEGUG );
  2. Layout myLayout = new PatternLayout("%d{ yyyy-MM-dd}; %t;%p; %m%n ");
  3. String filePathName="/somepath/somefile.log";
    FileAppender myAppender = new FileAppender(myLayout,filePathName);
  4. myLogger.setAdditiity( false ); // remove appender from parent loggers
    myLogger.addAppender( myAppender );
------------------------------------------------------------------------------------
Note: configure log4j in the code
The common way to configure log4j API is using the log4j.properties file in the class path.
Although configure log4j in the code is not advised, but it is sometimes needed.
In the past articale : just not System.out, Note: log4j mentioned, the most important three things is:
  1. Logger --> for receiving messages
  2. Appender --> outupt messages to some target
  3. Layout --> used represent the format of messages which will be outputed
log4j.properties is mainly used to configure these three things . Of course, these three things will be configured in your code if you want configure log4j in your code.
The basic configure will be very easy, just follow four steps below:

  1. Logger myLogger = Logger.getLogger( this.getClass() );
    myLogger.setLevel( Level.DEGUG );
  2. Layout myLayout = new PatternLayout("%d{ yyyy-MM-dd}; %t;%p; %m%n ");
  3. String filePathName="/somepath/somefile.log";
    FileAppender myAppender = new FileAppender(myLayout,filePathName);
  4. myLogger.setAdditiity( false ); // remove appender from parent loggers
    myLogger.addAppender( myAppender );

2007年6月7日 星期四

JavaScript技巧:判斷多選的select選單是否有值被選取

JavaScript技巧:判斷多選的select選單是否有值被選取
假設我在HTML中有一表單項如下:

<select name="lstProductLine" id="lstProductLine" multiple size="4">
<option value="" >Select items below</option>
<option value="1000" selected>1000</option>
<option value="2000" selected>2000</option>
<option value="3000" selected>3000</option>
<option value="4000" selected>4000</option>
<option value="4100" selected>4100</option>
<option value="4300" selected>4300</option>
<option value="7010" selected>7010</option>
<option value="7020" selected>7020</option>
<option value="7030" selected>7030</option>
</select>

注意select標籤的multiple屬性代表可做多選。
如今,我想在表單submit之前,先檢查使用者是否至少有選取一到多項的值,可使用如下程式碼來判斷:
function btnSave_onclick()
 {
   if(isValueSelectedInLstBox(document.getElementById('lstProductLine')))
    { //submit }
 }
function isValueSelectedInLstBox(selectObj)
{
 for(var i=0;i<selectObj.options.length;i++)
   { if(selectObj.options[i].selected==true)
    { if(selectObj.options[i].value!='') return true; }
   }
return false;
}

恩,用來驗證表單非常實用。