@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…