2017年1月30日 星期一

將 JSF Composite Component 包裝成 jar 檔供其他 Web 專案使用

1.技術問題

JSF 的 composite component (複合元件) 的功能可以組合現有 UIComponent 成為新的、重複使用的元件。可以組合成的複合元件使用、驗證器、轉換器、JSF 系統事件、及 AJAX。 完成的複合元件會包含:
  • facelet: 檔案名稱為新的標籤的名稱,其內容定義標籤的屬性及組合現有的元件。
  • java class: 支援此複合元件執行所需要的 java 程式碼。
例如,可以組合 h:outputLabel, h:inputText, h:commandButton 等三個元件,再加上一個驗證器成為新的元件專門用來輸入電子郵件。
當你完成複合元件時,你可以在現有 Web 專案的 facelet 中直接使用此元件的標籤。但是,如何將此複合元件變成一個獨立的程式庫供其他的 Web 專案使用呢?

2017年1月27日 星期五

h:inputxxx 標籤所支援的 ajax behavior event 有哪些?


技術問題:

jsf 提供 f:ajax 標籤讓元件具備 Ajax 處理的能力。f:ajax 的 event 屬性要指定與攔截的客戶端的事件[1]。若沒有指定,會使用預設的事件。

h:inputText, h:inputTextArea, h:inputSecret 標籤提供哪些 ajax 事件行為呢?

參考答案:

h:inputText, h:inputTextArea, h:inputSecret 三個標籤的元件皆是屬於 javax.faces.component.EditableValueHolder 類別的元件。這類的元件的預設 ajax 事件為 valueChange。詳細的事件如下:

2017年1月2日 星期一

如何在 Weblogic 中設定 Java DB 的 DataSource

技術問題:

已有一個 Java DB,其路徑為 D:\derby\TicketCareDB。如何在 Weblogic Server 下新增一個此 Java DB 的 Data Source,使得  Weblogic 啟動時自動啟動此 Java DB?

做法:
1. 開啟 Weblogic 的 Admin Console.
2. Navigate to (youDomain) Services > Data Sources > (B)New 新增一個 Generic Data Source
3. 設定相關的欄位,其中 Database Name 欄位要設定為 Java DB 的路徑(ie. D:\derby\TicketCareDB )

更多細節,請參考 [1].


Reference:
[1]  https://blakboard.wordpress.com/2012/11/27/set-up-apache-derby-jdbc-data-source-in-oracle-weblogic-application-server/

PrimeFaces 處理 Ajax request 過程中所產生的 callbacks 及 events

在執行 Ajax Request 的前後, 我們可以有機會執行 Javascript 完成瀏覽器上的操作。過程中的一連串的過程如下:

  • User clicks button in client
  • onclick JavaScript code is executed
  • JavaScript prepares ajax request based on process and current HTML DOM tree
  • onstart JavaScript code is executed
  • JavaScript sends ajax request from client to server
  • JSF retrieves ajax request
  • JSF processes the request lifecycle on JSF component tree based on process
  • actionListener JSF backing bean method is executed
  • action JSF backing bean method is executed
  • JSF prepares ajax response based on update and current JSF component tree
  • JSF sends ajax response from server to client
  • JavaScript retrieves ajax response
    • if HTTP response status is 200, onsuccess JavaScript code is executed
    • else if HTTP response status is 500, onerror JavaScript code is executed
  • JavaScript performs update based on ajax response and current HTML DOM tree
  • oncomplete JavaScript code is executed