faces-config.xml、messages.properties 等配置。<%@ taglib uri="https://java.sun.com/jsf/html" prefix="h" %> <!-- UI 組件 -->
<%@ taglib uri="https://java.sun.com/jsf/core" prefix="f" %> <!-- 核心邏輯/國際化 -->
faces-config.xml 定義導航規則與 Bean 管理。<f:loadBundle var="bundle" basename="com.Login.MessageBundle" />
EL 表達式 #{bundle.login_button_label} 直接取值。
<navigation-rule>
<from-view-id>/Login.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/LoginSuccessfully.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/Login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>UserBean</managed-bean-name>
<managed-bean-class>com.Login.Use.UserBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<h:commandButton id="submit" action="#{UserBean.loginUser}" value="#{bundle.login_button_label}" />
頁面為 .jsp,請求用 .faces (如 /login.faces) 對應 FacesServlet。
JSF 不僅分離業務邏輯與表示層,更進一步分離了頁面內容 (透過資源包),實現「三層分離」,提升維護彈性。