@Stateful @Named @SessionScoped public class AccountService implements Serializable { private static final long serialVersionUID = 7103565672729007156L; @PersistenceContext(unitName = “AccountManagementEJB”) EntityManager em; @Inject private Usertab user; @Inject private Credentials credential; …. public AccountService() { super(); }
public String login() { user = this.loginUser(credential.getUsername(),credential.getPassword()); if (user != null) return (“AccountInfo.jsf”); else return (“AccountLogin.jsf”); } public Usertab loginUser(String username, String password) { …. }
Getters() & Setters()…
} |
在 RAD 中開發 JSF2.0 Facelets 非常簡單,您只需要在您的 Dynamic Web Project 中 New->Web Page,選擇 Facelet,如圖 21 所示。
點擊 Finish,打開”Palette”view 中”Standard Faces Components”,即可進行 JSF 頁面開發,如圖 22 所示。
我們已經完成了 CDI Bean 和 JSF 頁面的開發,下一步僅需用 EL 表達式將其集成,即可完成 AccountLogin 程序。
在 AccountLogin.xhtml 中,利用 EL 表達式 #{credentials.username} 和 #{credentials.password} 對 Credentials 對象賦值,利用 #{accountService.login} 調用 AccountService bean 中 login 方法。這裡需要說明的是,當我們用 @Named 注釋修飾 Credentials 和 AccountService bean 時,其對應的默認 EL 變數名為首字母小寫的 Java Bean 名。具體的 JSF 代碼參見清單 15。
<h:form> <h1>Login</h1> <h:panelGrid columns=”2″> <h:outputLabel for=”username”>Username:</h:outputLabel> <h:inputText id=”username” value=”#{credentials.username}”/> <h:outputLabel for=”password”>Password:</h:outputLabel> <h:inputSecret id=”password” value=”#{credentials.password}”/> </h:panelGrid> <h:commandButton value=”Login” action=”#{accountService.login}”/> </h:form> |
運行 AccountLogin.xhtml,可以得到與圖 1 相同的顯示效果和功能。不同的是您訪問的 URL 是 http://localhost:9081/AccountManagementWeb_CDI/AccountLogin.faces,而不再是 JSP 文件。
完成全部開發後,我們的 AccountMangementWeb_CDI 項目組織結構參見圖 23。
圖 23. AccountManagementWeb_CDI 項目組織結構
圖 23 中橙色方框中的文件皆由 RAD 自動生成。對比圖 17,在啟用了 CDL 服務的 Account Login 程序中,我們去除了 Servlet 和 JSP 部分,僅添加了 JSF 和少量的 CDI 注釋、Backing bean 代碼,進一步簡化了開發過程。
結束語
本文通過 Account Login 實例,介紹了 Java EE 6 中 EJB 3.1、JPA 2.0、Servlet 3.0、Bean Validation、CDI、JSF 2.0 等新特性。由於篇幅所限,我們的實例中僅觸及了這些規範中最淺顯的部分,供讀者作為 Java EE 6 快速入門參考。
以下文章點擊率最高
Loading…