本系列第四篇,介紹如何將 Apache Trinidad(Oracle ADF Faces 開源版)元件庫整合至 Geronimo 上的 JSF 應用程式,以豐富的 UI 元件(表單、佈局、導航、資料表、彈出日曆等)取代原有 MyFaces/Tomahawk 混合實作,提升開發效率與介面一致性。
| 元件 | 用途 |
|---|---|
| <tr:inputText> | 支援標籤、訊息、密碼模式的文字輸入 |
| <tr:inputDate> | 日期輸入附彈出日曆 |
| <tr:panelFormLayout> | 表單佈局:垂直排列標籤與欄位,支援多欄、腳註 |
| <tr:commandButton> | 觸發動作按鈕 |
| <tr:table> | 資料表:支援選取、排序、分頁、詳細資訊提示 |
| <tr:navigationTree> | 樹狀導航選單,支援展開/收合 |
| <tr:progressIndicator> | 長時間作業進度條 |
| <tr:validateRegExp> | 正則表達式驗證 |
| <tr:convertDateTime> | 日期時間格式轉換 |
| <tr:panelPartialRoot> | 局部頁面更新容器(AJAX 基礎) |
完整元件清單超過 80 種,涵蓋 UI、佈局、導航、驗證、轉換、工具等類別。

trinidad-api-incubator-m1-SNAPSHOT.jar、trinidad-impl-incubator-m1-SNAPSHOT.jar。

javax.faces.STATE_SAVING_METHOD 設為 client(Trinidad 混合狀態策略需客戶端狀態)。MyFacesExtensionsFilter 相關 filter/filter-mapping。<filter>
<filter-name>faces</filter-name>
<filter-class>org.apache.myfaces.trinidadinternal.webapp.FacesFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>faces</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>resources</servlet-name>
<servlet-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resources</servlet-name>
<url-pattern>/trinidad/*</url-pattern>
</servlet-mapping>
Filter 處理 JSF 頁面輸出;Resource Servlet 服務 /trinidad/* 下的 JS/CSS/圖片資源。
<application>
<default-render-kit-id>org.apache.myfaces.trinidad.core</default-render-kit-id>
</application>
移除 Temperature Converter 等 Ajax4jsf 相關 Managed Bean。
<%@ taglib uri="https://myfaces.apache.org/trinidad" prefix="tr" %>
<%@ taglib uri="https://myfaces.apache.org/trinidad/html" prefix="trh" %>
移除 Tomahawk taglib 宣告。
使用 h:form、h:inputText、t:validateEmail、t:inputDate popupCalendar 等三種 Taglib 混雜,程式碼冗長。

<tr:form>
<tr:panelFormLayout>
<tr:inputText label="Screen name:" value="#{signupData.screenName}"/>
<tr:inputText label="Email:" value="#{signupData.email}"/>
<tr:inputText label="Password:" value="#{signupData.password}" secret="true"/>
<tr:inputText label="Password (for verification):" value="" secret="true"/>
<tr:inputDate id="birthday" value="#{signupData.birthday}"/>
</tr:panelFormLayout>
<tr:commandButton text="Sign up" action="#{signupData.register}" immediate="true"/>
</tr:form>
<tr:inputText> 內建標籤與訊息顯示,<tr:panelFormLayout> 自動垂直排版,<tr:inputDate> 預設含彈出日曆,程式碼行數大幅減少,可讀性與維護性顯著提升。
https://localhost:8080/devSignup/signup.faces,呈現整潔一致的 Trinidad 風格表單。
本教程示範了 Trinidad 元件庫的豐富功能、專案整合配置步驟,並實戰重構了開發人員論壇註冊頁面,展現 Trinidad 統一元件模型帶來的開發效率與介面一致性優勢。下一篇(系列最終篇)將介紹整合 Spring Framework,實現依賴注入與企業級應用架構。