JavaServerFacesCRUD应用程序.doc_第1页
JavaServerFacesCRUD应用程序.doc_第2页
JavaServerFacesCRUD应用程序.doc_第3页
JavaServerFacesCRUD应用程序.doc_第4页
JavaServerFacesCRUD应用程序.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaServer Faces CRUD 应用程序在本教程中,您将使用NetBeans IDE来生成和部署显示数据库中数据的Web应用程序。本教程将演示如何生成具备CRUD(创建、阅读、更新、删除)功能的Web应用程序,该应用程序使用Java持久性API(JPA)管理数据库事务。在本教程中,您首先将根据数据库表创建一些实体类,然后使用通过实体类创建JSF页向导,通过实体类来创建JavaServer Faces(JSF)页面。通过实体类创建JSF页向导允许您根据项目的实体类方便快捷地生成操作数据库的JSF页面。向导中的选项还包括:在已生成的JSF页面中启用Ajax功能。向导生成的代码如下所示:该代码易于维护和定制。处理所有关系类型、已生成的和未生成的ID和嵌入式ID,包括与外键列相关的嵌入式ID字段。嵌入式ID字段在合适的地方显示为只读。包括为防止非可空列冲突的必要检查,和为防止关联实体中非可空列冲突的孤儿检查。该向导将包括实体类中的标注元素nullable或optional。包括一些验证检查,即验证当前实体是否正确,从而在用户脱离正常页面流(例如,在多个浏览器标签下工作时)时防止错误发生。放弃一些特定文件里按属性分配的代码,以防稍后对数据库架构的修改。可轻易地从已生成的JSP中移除字段以简化定制。当用户试图对已经被另一个用户删除的实体进行操作时,或试图创建一个已经存在的实体时采取合理的处理方式。可以方便地定制页面样式除了生成JSF页面之外,通过实体类创建JSF页向导还整合了基于实体类的JPA控制器类向导的功能。如果要为实体类创建JPA控制器类,但不希望通过JSF页面生成,则可使用基于实体类的JPA控制器类向导来代替通过实体类创建JSF页向导。注意:本教程使用NetBeans IDE 6.5。如果您正在使用NetBeans IDE 6.1,请参见通过NetBeans IDE 6.1生成JavaServer Faces CRUD应用程序。目录创建数据库查看数据库结构创建Web应用程序项目通过数据库生成实体类编辑实体类通过实体类生成JSF页面在应用程序中启用Ajax通过实体类生成JPA控制器类将数据添加到数据库中使用SQL脚本添加数据使用Web接口添加数据探究已生成代码的功能只读主键字段生成的错误检查要学习本教程,您需要具备以下软件和资源。软件或资源要求的版本NetBeans IDE6.5 Java Java开发工具包(Java Developer Kit,JDK)版本6或版本5 GlassFish应用服务器V2咨询代理数据库下载SQL注意:GlassFish应用服务器包含在NetBeans下载中。创建数据库本教程使用一个名为consult的咨询代理数据库。安装IDE时,该数据库并未包括其中,因此需要先根据本教程创建该数据库。consult数据库旨在演示IDE处理各种数据库结构的范围。因此,该数据库并未打算成为数据库设计的推荐范例。相反,它尝试将可能会在数据库设计中遇到的许多相关功能包含了进来。例如,consult数据库包含了所有可能的关系类型、复合主键和许多不同的数据类型。参见表了解有关数据库结构的更详细的概览。注意:本教程使用JavaDB数据库服务器,但也可使用MySQL数据库服务器来完成本教程的学习。要在MySQL中创建该数据库,请下载并解压mysql-consult.zip文件。有关配置IDE来操作MySQL的更多信息,请参见连接到MySQL数据库教程。下载derby-consult.zip并将该归档解压到本地系统。解压该归档之后,您将看到两个SQL脚本:derby_create_consult.sql和derby_insert_data_consult.sql。在服务窗口中,展开数据库节点,右键单击JavaDB节点并选择启动服务器。右键单击Java DB节点并选择创建数据库。在创建Java DB对话框中,键入consult作为数据库名、用户名和密码。单击确定。数据库节点(jdbc:derby:/localhost:1527/consultconsult on CONSULT)下出现了一个新节点。右键单击新节点并选择连接从主菜单中选择文件打开文件并导航至解压后的文件derby_create_consult.sql。单击选择。文件会自动在SQL编辑器中打开。确保在SQL编辑器工具栏连接下拉列表中选中了consult数据库,单击运行SQL按钮。单击运行SQL,输出窗口中将出现以下输出。查看数据库结构要查看是否已经正确创建了表,展开数据库连接节点下的表节点。您可以展开表节点来查看表的列、索引和任意外键。可以右键单击一列并选择属性来查看关于该列的其他信息。如果在表节点下没看到任何表,右键单击表节点并选择刷新。从consult数据库的结构可看出该数据库包含含有各种关系和各种字段类型的表。通过数据库创建实体类时,IDE会为各种字段类型自动生成相应的代码。下表描述了consult数据库中的表数据库表描述设计功能CLIENT咨询代理的客户非生成、复合主键(其字段不构成外键)CONSULTANT咨询代理的雇员,客户可根据合同对其进行雇佣。包括一个LONG VARCHAR类型的简历字段CONSULTANT_STATUS咨询顾问在咨询代理公司的状况(例如,活跃和不活跃这两种可能的状况)CHAR类型的非生成主键RECRUITER负责联系客户和咨询顾问的咨询代理公司雇员PROJECT客户出人配合咨询代理公司的咨询顾问的一个项目非生成、复合主键,包含构成到CLIENT表的一个外键的两个字段BILLABLE咨询顾问在一个项目上花费的几小时,咨询代理公司因之向相关客户收费包括一个CLOB类型的人工字段ADDRESS客户账单地址PROJECT_CONSULTANTJoin表表明哪些顾问当前委派到了哪些项目对照PROJECT和CONSULTANT,前者有一个复合主键consult数据库包含各种关系。通过数据库创建实体类时,IDE会自动生成表关系的代码,将相应的标注添加到实体类的字段中。下表描述了consult数据库中的表关系。(未显示逆向关系)数据库表相关表关系信息描述CLIENTRECRUITER手动编辑的可空一对一;未编辑的可空一对多一个CLIENT有多个RECRUITER,一个RECRUITER没有或有一个CLIENT CLIENTADDRESS非可空一对一CLIENT有一个ADDRESS,一个ADDRESS没有或有一个CLIENT CLIENTPROJECT非可空一对多;项目实体中,客户字段的值是项目主键的一部分一个CLIENT有(可被委派)多个PROJECT,一个PROJECT有一个CLIENT CONSULTANTBILLABLE非可空一对多一个CONSULTANT有多个BILLABLE,一个BILLABLE有一个CONSULTANT CONSULTANTCONSULTANT_STATUS非可空一对多一个CONSULTANT有一个CONSULTANT_STATUS,CONSULTANT_STATUS有(可被委派)多个CONSULTANT。CONSULTANTRECRUITER可空一对多一个CONSULTANT没有或有一个RECRUITER,RECRUITER有多个CONSULTANT BILLABLEPROJECT非可空一对多一个BILLABLE有一个PROJECT,一个PROJECT有多个BILLABLES PROJECT_CONSULTANTCONSULTANT非可空一对多一个PROJECT_CONSULTANT有一个CONSULTANT,一个COSULTANT有(可被委派)多个PROJECT_CONSULTANT PROJECT_CONSULTANTPROJECT一对多一个PROJECT_CONSULTANT有一个PROJECT,一个PROJECT有多个PROJECT_CONSULTANT创建数据库之后,您可以创建Web应用程序,并使用通过数据库创建实体类向导来生成基于数据库表的实体类。创建Web应用程序项目在本练习中,您将创建一个Web项目并将JavaScript Faces框架添加到该项目中。创建项目之后,在新建项目向导的框架面板中选择JavaServer Faces。选择文件新建项目(Ctrl-Shift-N)。从Java Web类别从选择Web应用程序。单击下一步。键入ConsultingAgency作为项目名称,并指定项目位置。取消选中使用专用的文件夹来存储库选项(如果该选项处于选中状态)。(对于本教程,没有理由将项目库复制到指定文件夹,因为您将需要与其他用户共享库)。单击下一步。将服务器设置为GlassFish,并将Java EE版本设置为Java EE 5。单击下一步。在框架面板中选中JavaServer Faces复选框。单击完成。注意:选择框架时,一定要选择JavaServer Faces框架,而非Visual Web JavaServer Faces。单击完成后,IDE将创建Web应用程序项目并在编辑器中打开welcomeJSF.jsp。您可以关闭welcomeJSF.jsp,因为不再需要编辑此文件。通过数据库生成实体类创建数据库并在IDE中注册数据库连接后,可使用通过数据库创建实体类向导快速生成基于该数据库表的实体类。IDE可以为选择的每个表生成实体类,也能为关联表生成任意必要的实体类。在项目窗口中,右键单击ConsultingAgency节点,从数据库中选择新建实体类从数据源下拉列表中选择新建数据源打开创建数据源对话框。键入jdbc/consult作为JNDI名称并选择jdbc:derby:/localhost:1527/consultconsult on CONSULT作为数据库连接。单击确定关闭对话框并返回向导。consult数据库中的表将出现在可用表列表框。单击向导中的添加全部单击下一步。键入jpa.entities作为包。确保已选中用于生成指定查询的复选框。单击创建持久性单元,打开创建持久性单元对话框。在对话框中单击创建以创建持久性单元并返回向导。可以保留持久性单元的缺省值。单击下一步。保留向导映射选项页面中的缺省值。单击完成。如果您希望在生成的实体中进一步定制标注,或集合类型,可以使用向导的映射选项页面。对本教程而言,缺省值已经绰绰有余。使用向导通过数据库创建实体类时,IDE会检查各表之间的关系。在属性窗口,展开jpa.entities源包节点,可以看到IDE为除PROJECT_CONSULTANT表之外的每个表都生成了一个实体类。IDE没有为PROJECT_CONSULTANT创建实体类,因为该表是一个联合表。IDE还为具有复合主键的表CLIENT和PROJECT生成了两个额外的类。这些表的主键类(ClientPK.java和ProjectPK.java)在类名称后追加了PK。如果查看为实体类生成的代码,您可以发现向导为ID字段添加了GeneratedValue标记,并且为实体类的一些字段添加了Basic(optional=false)标注元素。基于Basic(optional=false)的标注元素,通过实体类创建JSF页向导可以生成实现防止非可空列冲突的必要检查的代码。编辑实体类如果需要,您现在就可以修改生成的实体类。在本练习中,您将修改实体类toString方法的实现。您还将修改Client和Recruiter类中的标注,从而将客户和雇员的关系由一对多改为一对一。由于雇员与咨询顾问间已经存在了可空的一对多关系,出于在本教程中进行演示的目的,您将在客户和雇员间建立起可空的一对一关系。注意:本教程的这一部分为可选内容,在使用通过实体类创建JSF页向导生成JSF页面之前无需对实体类做任何更改。编辑Address.java打开Address实体类并进行以下更改。修改toString方法的return语句以返回完整的地址:return line1+,+line2+,+city+,+region+,+country+,+postalCode;可以使用IDE的代码完成功能来帮助您添加字段。如有必要,修复导入并保存更改。编辑Billable.java打开Billable实体类并进行以下更改。修改toString方法的return语句,以返回description、consultant id和project:public String toString()return description+,+consultantId+,+project;如有必要,修复导入并保存更改。编辑Client.java修改recruiterCollection字段的OneToMany标注,改为一对一关系,将字段由Collection改为Recruiter recruiter。OneToOne(mappedBy=client)private Recruiter recruiter;根据字段名的变化修改Collection Recruiter recruiterCollection的getter和setter方法。新的getter和setter方法如下所示:public Recruiter getRecruiter()return recruiter;public void setRecruiter(Recruiter recruiter)this.recruiter=recruiter;使用插入代码对话框删除Collection Recruiter recruiterCollection的getter和setter方法然后为Recruiter recruiter生成新的getter和setter方法会更加容易。要创建新的getter和setter方法,请右键单击源代码,选择插入代码(Alt-Insert)然后选择Getter和Setter。在生成Getter和Setter对话框中选择recruiter,并单击生成。修改toString方法的return语句,以返回String.valueOf(clientPK)。public String toString()return String.valueOf(clientPK);如有必要,修复导入并保存更改。编辑ClientPK.java修改toString方法的return语句以返回client name和department number。public String toString()return clientName+,+Dept.+clientDepartmentNumber;如有必要,修复导入并保存更改。编辑Consultant.java修改toString方法的return语句以返回email。public String toString()return email;如有必要,修复导入并保存更改。编辑ConsultantStatus.java修改toString方法的return语句以返回status ID和description。public String toString()return statusId+,+description;如有必要,修复导入并保存更改。编辑Project修改toString方法的return语句以返回以下内容:public String toString()return(projectPK=null?(unnamed project):projectPK.getProjectName()+,+client;如有必要,修复导入并保存更改。编辑Recruiter.java修改client字段的ManyToOne标注,将关系标示为一对一关系。OneToOne private Client client;修改toString方法的return语句以返回email。public String toString()return email;如有必要,修复导入并保存更改。通过实体类生成JSF页创建实体类之后,您可以创建用于显示和修改数据的Web接口。您将使用通过实体类创建JSF页向导生成JavaServer Faces页面。向导生成的代码包括基于实体类标注的检验。该向导还提供了以下选择:通过用Dynamic Faces技术扩展JavaServer Faces技术,在应用程序中启用Ajax功能。向导对每个实体类都生成了以下内容:一个JPA控制器类一个JSF控制器类一个JSF转换器类一个包含四个JSP文件的目录:(Detail.jsp、Edit.jsp、List.jsp、New.jsp)针对faces-config.xml中的类的受管bean元素、转换器元素和导航规则该向导还会生成由控制器类所使用的类。JPA控制器使用的异常类JSF控制器使用的实体类生成JSF页面:请在项目窗口中右键单击项目节点并选择新建通过实体类创建JSF页面以打开通过实体类创建JSF页向导。向导的可用表面板列示了项目的七个实体类。向导并未列示可嵌入类(ClientPK.java和ProjectPK.java)单击全部添加,将所有类移动至向导的选定的实体类面板。单击下一步。键入jpa.controllers作为JPA控制器包。键入jsf作为JSF类包。选择生成的支持Ajax的页面。单击完成。单击完成后,IDE将为jpa.controllers包的实体类创建JPA控制器类,为jsf包的实体类创建JSF转换器类和JSF控制器类。每个JPA控制器类通过Java持久性API为相应的实体类处理操作,包括:创建、编辑和销毁实体类的实例。每个JSF转换器类实现由JavaServer Faces定义的javax.faces.convert.Converter接口,并执行将相应实体类的实例与String对象相互转换的操作。每个JSF控制器类专门针对相应生成的JSP,其中包括调用JPA控制器类方法的代码,并演示了要捕获的异常。总的来说,修改应用程序时,您希望修改JSF控制器类的控制器逻辑并使用生成的代码作为例子。展开Web页面节点,您可以看到IDE为每个实体类都生成了一个文件夹。每个文件夹都包括文件Detail.jsp、Edit.jsp、List.jsp和New.jsp。IDE还通过为每个List.jsp页面插入链接修改了welcomeJSF.jsp。展开源包节点,您可以看到由向导生成的控制器、转换器、异常和实用程序类。展开配置文件节点并在XML编辑器中打开faces-config.xml,您可以看到IDE为每个控制器类和转换器类都插入了受管bean和转换器元素。IDE还为每个JSP插入了一个导航规则元素,用于指示导致应用程序导航到该JSP的逻辑结果。在应用程序中启用Ajax在通过实体类创建JSF页面向导的最终面板中,您可以选择生成的支持Ajax的页面,通过JSF框架的Dynamic Faces扩展在应用程序中启用Ajax功能。向导将所需的JSF扩展库添加到该项目并配置应用程序的部署描述符,从而启用Ajax生命周期。有关Dynamic Faces JSF扩展的更多信息,请参见JavaServer Faces技术扩展站点。如果选择该选项,向导会执行以下操作。将JSF扩展库添加到项目(jsf-extensions-common、jsf-extensions-dynamic-faces、commons-logging和shale-remoting),这是在项目中使用Dynamic Faces技术所必需的。通过为javax.faces.LIFECYCLE_ID初始化参数添加条目并设定到com.sun.faces.lifecycle.PARTIAL的值,修改Web.xml以配置FacesServlet从而使用Ajax生命周期。在Web-INF/jspf目录下生成JSP片段文件AjaxScripts.jspf。AjaxScripts.jspf将呈现包含在Dynamic Faces库中的JavaScript文件。该应用程序在Web页面目录中包含了一个JavaScript文件jsfcrud.js。jsfcrud.js文件检查是否呈现了Dynamic Faces JavaScript,以确定是否启用了Dynamic Faces。如果启用了Dynamic Faces,该表单将被配置为发送Ajax请求。使用Dynamic Faces扩展在应用程序中启用Ajax之后,可以修改该应用程序以进一步添加由Dynamic Faces扩展提供的功能。通过实体类生成JPA控制器类在生成的Web应用程序中,JPA控制器方法被JSF控制器类中的方法访问。使用通过实体类创建JSF页向导时,IDE会自动为每个选定的实体生成JPA控制器类。但JPA控制器类的使用并不限于JSF Web应用程序。您可以在使用Java持久性API(例如,桌面应用程序)的其他应用程序中使用JPA控制器类,以操作实体类并管理实体持久性。借助基于实体类的JPA控制器类向导,您可以轻松地在项目中创建JPA控制器类。要创建JPA控制器类,请在持久性类别中打开新建文件向导,并选择通过实体类生成JPA控制器类。在向导中,指定JPA控制器类所针对的实体类,然后指定IDE创建该文件的位置。该向导还会自己创建JPA控制器类所使用的异常类。生成JPA控制器之后,可以从其它文件访问这些控制器方法。如更新数据库架构,可再次运行通过数据库创建实体类和通过实体类创建JPA控制器向导以更新数据。如果愿意,创建JPA控制器类之后,可运行通过实体类创建JSF页向导并指定现有JPA控制器类包,在这种情况下,您将利用现有的JPA控制器类而非重新生成。向数据库添加数据创建应用程序之后,可以部署并运行该应用程序。您创建的Consulting Agency数据库尚未被填充。需通过Web接口或通过运行SQL脚本为数据库添加数据。添加数据后,您将看到各表之间的关系如何运行。使用SQL脚本添加数据如果不希望通过Web形式添加数据,您可以运行包含在derby-consult.zip中的derby_insert_data_consult.sql脚本。从主菜单选择文件打开文件,打开derby_insert_data_consult.sql。文件将自动在SQL编辑器中打开。请确保在SQL编辑器工具栏的连接下拉列表中选定了consult数据库,在工具栏中单击运行SQL按钮。您可以在输出窗口中查看脚本运行的结果。注意:如果正在使用的是MySQL数据库服务器,请打开包含在mysql-consult.zip中的mysql_insert_data_consult.sql文件。使用Web接口添加数据可通过在浏览器中启动该应用程序并通过Web表单添加数据的形式为数据库添加数据。在主工具栏中单击运行主项目。IDE将保存所有修改的文件,重新生成应用程序并将其部署到服务器中。缺省Web浏览器打开到以下本地址:单击显示全部地址条目并单击新建地址。将以下数据添加到New Address表单。字段值Line1100 Data Street Line2Suite 432 CitySan Francisco区域California CountryUSA PostalCode94103单击创建单击索引以返回到索引页面。单击显示全部客户条目并单击新建客户在New Client表单中,添加以下数据。字段值ClientDepartmentNumber2000 Client NameBig Data Corp.Contact E Contact Passwordaccounting从下拉列表的BillingAddress中选择Palm Spring Street。单击创建,再单击索引,返回到索引页面。单击显示全部Project条目并单击新建项目。在New Project表单中添加以下数据.字段值ProjectNameSecret Project ContactE ContactPasswordproject.manager单击创建,再单击索引,返回到索引页面。单击显示全部Consultant Status条目并单击新建Consultant Status在新的ConsultantStatus表单中添加以下数据。字段值StatusIdA描述活动单击创建,再单击索引,返回到索引页面。单击显示全部Consultant条目然后单击新建Consultant。在新Consultant表单中添加以下数据字段值电子邮件口令janet.smart HourlyRate80 BillableHourlyRate120在ProjectCollection字段中选择Secret Project。从StatusId下拉列表中选择A,Active。单击创建,再单击索引,返回到索引页面。单击显示全部Billable条目并单击新建Billable将以下数据添加到New Billable表单中。字段值StartDate2008-10-13 00:00:00.0 EndDate2008-10-17 00:00:00.0小时40 HourlyRate80 BillableHourlyRate120描述begin gathering requirements ConsultantI项目Secret Project Click Create and then click New Billable.将以下数据添加到New Billable表单中。这次,将在描述字段中键入finish gathering requirements。字段值StartDate2008-10-20 00:00:00.0 EndDate2008-10-24 00:00:00.0小时40 HourlyRate80 BillableHourlyRate120描述finish gathering requirements ConsultantI项目Secret Project单击创建并返回到索引页面。单击显示全部Recruiter条目并单击New Recruiter。将以下数据添加到New Recruiter表单。字段值电

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论