




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.JavaServer Faces CRUD 应用程序在本教程中,您将使用NetBeans IDE来生成和部署显示数据库中数据的Web应用程序。本教程将演示如何生成具备CRUD创立、阅读、更新、删除功能的Web应用程序,该应用程序使用Java持久性APIJPA管理数据库事务。在本教程中,您首先将根据数据库表创立一些实体类,然后使用"通过实体类创立JSF页"向导,通过实体类来创立JavaServer FacesJSF页面。"通过实体类创立JSF页"向导允许您根据工程的实体类方便快捷地生成操作数据库的JSF页面。向导中的选项还包括:在已生成的JSF页面中启用
2、Ajax功能。向导生成的代码如下所示:该代码易于维护和定制。处理所有关系类型、已生成的和未生成的ID和嵌入式ID,包括与外键列相关的嵌入式ID字段。嵌入式ID字段在适宜的地方显示为只读。包括为防止非可空列冲突的必要检查,和为防止关联实体中非可空列冲突的孤儿检查。该向导将包括实体类中的标注元素nullable或optional。包括一些验证检查,即验证当前实体是否正确,从而在用户脱离正常页面流例如,在多个阅读器标签下工作时时防止错误发生。放弃一些特定文件里按属性分配的代码,以防稍后对数据库架构的修改。可轻易地从已生成的JSP中移除字段以简化定制。当用户试图对已经被另一个用户删除的实体进展操作时,
3、或试图创立一个已经存在的实体时采取合理的处理方式。可以方便地定制页面款式除了生成JSF页面之外,"通过实体类创立JSF页"向导还整合了"基于实体类的JPA控制器类"向导的功能。假设要为实体类创立JPA控制器类,但不希望通过JSF页面生成,那么可使用"基于实体类的JPA控制器类"向导来代替"通过实体类创立JSF页"向导。注意:本教程使用NetBeans IDE 6.5。假设您正在使用NetBeans IDE 6.1,请参见通过NetBeans IDE 6.1生成JavaServer Faces CRUD应用程序。目录
4、创立数据库查看数据库构造创立Web应用程序工程通过数据库生成实体类编辑实体类通过实体类生成JSF页面在应用程序中启用Ajax通过实体类生成JPA控制器类将数据添加到数据库中使用SQL脚本添加数据使用Web接口添加数据探究已生成代码的功能只读主键字段生成的错误检查要学习本教程,您需要具备以下软件和资源。软件或资源要求的版本NetBeans IDE6.5 Java Java开发工具包Java Developer Kit,JDK版本6或版本5 GlassFish应用效劳器V2咨询代理数据库下载SQL注意:GlassFish应用效劳器包含在NetBeans下载中。创立数据库本教程使用一个名为consu
5、lt的咨询代理数据库。安装IDE时,该数据库并未包括其中,因此需要先根据本教程创立该数据库。consult数据库旨在演示IDE处理各种数据库构造的范围。因此,该数据库并未打算成为数据库设计的推荐范例。相反,它尝试将可能会在数据库设计中遇到的许多相关功能包含了进来。例如,consult数据库包含了所有可能的关系类型、复合主键和许多不同的数据类型。参见表理解有关数据库构造的更详细的概览。注意:本教程使用JavaDB数据库效劳器,但也可使用MySQL数据库效劳器来完本钱教程的学习。要在MySQL中创立该数据库,请下载并解压mysql-consult.zip文件。有关配置IDE来操作MySQL的更多信
6、息,请参见连接到MySQL数据库教程。下载derby-consult.zip并将该归档解压到本地系统。解压该归档之后,您将看到两个SQL脚本:derby_create_consult.sql和derby_insert_data_consult.sql。在"效劳"窗口中,展开"数据库"节点,右键单击"JavaDB"节点并选择"启动效劳器"。右键单击"Java DB"节点并选择"创立数据库"。在"创立Java DB对话框中",键入consult作为数据库名、用
7、户名和密码。单击"确定"。数据库节点jdbc:derby:/localhost:1527/consultconsult on CONSULT下出现了一个新节点。右键单击新节点并选择"连接"从主菜单中选择"文件""翻开文件"并导航至解压后的文件derby_create_consult.sql。单击"选择"。文件会自动在SQL编辑器中翻开。确保在SQL编辑器工具栏"连接"下拉列表中选中了consult数据库,单击"运行SQL"按钮。单击"运行SQL&
8、quot;,"输出"窗口中将出现以下输出。查看数据库构造要查看是否已经正确创立了表,展开数据库连接节点下的"表"节点。您可以展开表节点来查看表的列、索引和任意外键。可以右键单击一列并选择"属性"来查看关于该列的其他信息。假设在"表"节点下没看到任何表,右键单击"表"节点并选择刷新。从consult数据库的构造可看出该数据库包含含有各种关系和各种字段类型的表。通过数据库创立实体类时,IDE会为各种字段类型自动生成相应的代码。下表描绘了consult数据库中的表数据库表描绘设计功能CLIENT咨询代
9、理的客户非生成、复合主键其字段不构成外键CONSULTANT咨询代理的雇员,客户可根据合同对其进展雇佣。包括一个LONG VARCHAR类型的简历字段CONSULTANT_STATUS咨询参谋在咨询代理公司的状况例如,活泼和不活泼这两种可能的状况CHAR类型的非生成主键RECRUITER负责联络客户和咨询参谋的咨询代理公司雇员PROJECT客户出人配合咨询代理公司的咨询参谋的一个工程非生成、复合主键,包含构成到CLIENT表的一个外键的两个字段BILLABLE咨询参谋在一个工程上花费的几小时,咨询代理公司因之向相关客户收费包括一个CLOB类型的人工字段ADDRESS客户账单地址PROJECT_
10、CONSULTANTJoin表说明哪些参谋当前委派到了哪些工程对照PROJECT和CONSULTANT,前者有一个复合主键consult数据库包含各种关系。通过数据库创立实体类时,IDE会自动生成表关系的代码,将相应的标注添加到实体类的字段中。下表描绘了consult数据库中的表关系。未显示逆向关系数据库表相关表关系信息描绘CLIENTRECRUITER手动编辑的可空一对一;未编辑的可空一对多一个CLIENT有多个RECRUITER,一个RECRUITER没有或有一个CLIENT CLIENTADDRESS非可空一对一CLIENT有一个ADDRESS,一个ADDRESS没有或有一个CLIENT
11、 CLIENTPROJECT非可空一对多;工程实体中,客户字段的值是工程主键的一部分一个CLIENT有可被委派多个PROJECT,一个PROJECT有一个CLIENT CONSULTANTBILLABLE非可空一对多一个CONSULTANT有多个BILLABLE,一个BILLABLE有一个CONSULTANT CONSULTANTCONSULTANT_STATUS非可空一对多一个CONSULTANT有一个CONSULTANT_STATUS,CONSULTANT_STATUS有可被委派多个CONSULTANT。CONSULTANTRECRUITER可空一对多一个CONSULTANT没有或有一个R
12、ECRUITER,RECRUITER有多个CONSULTANT BILLABLEPROJECT非可空一对多一个BILLABLE有一个PROJECT,一个PROJECT有多个BILLABLES PROJECT_CONSULTANTCONSULTANT非可空一对多一个PROJECT_CONSULTANT有一个CONSULTANT,一个COSULTANT有可被委派多个PROJECT_CONSULTANT PROJECT_CONSULTANTPROJECT一对多一个PROJECT_CONSULTANT有一个PROJECT,一个PROJECT有多个PROJECT_CONSULTANT创立数据库之后,您可
13、以创立Web应用程序,并使用"通过数据库创立实体类"向导来生成基于数据库表的实体类。创立Web应用程序工程在本练习中,您将创立一个Web工程并将JavaScript Faces框架添加到该工程中。创立工程之后,在"新建工程"向导的"框架"面板中选择"JavaServer Faces"。选择"文件""新建工程"Ctrl-Shift-N。从"Java Web"类别从选择"Web应用程序"。单击"下一步"。键入Consul
14、tingAgency作为工程名称,并指定工程位置。取消选中"使用专用的文件夹来存储库"选项假设该选项处于选中状态。对于本教程,没有理由将工程库复制到指定文件夹,因为您将需要与其他用户共享库。单击"下一步"。将"效劳器"设置为GlassFish,并将"Java EE版本"设置为"Java EE 5"。单击"下一步"。在"框架"面板中选中"JavaServer Faces"复选框。单击"完成"。注意:选择框架时,一定要选
15、择JavaServer Faces框架,而非Visual Web JavaServer Faces。单击"完成"后,IDE将创立Web应用程序工程并在编辑器中翻开welcomeJSF.jsp。您可以关闭welcomeJSF.jsp,因为不再需要编辑此文件。通过数据库生成实体类创立数据库并在IDE中注册数据库连接后,可使用"通过数据库创立实体类"向导快速生成基于该数据库表的实体类。IDE可以为选择的每个表生成实体类,也能为关联表生成任意必要的实体类。在"工程"窗口中,右键单击ConsultingAgency节点,从数据库中选择"
16、;新建实体类"从"数据源"下拉列表中选择"新建数据源"翻开"创立数据源"对话框。键入jdbc/consult作为"JNDI名称"并选择jdbc:derby:/localhost:1527/consultconsult on CONSULT作为"数据库连接"。单击"确定"关闭对话框并返回向导。consult数据库中的表将出如今"可用表"列表框。单击向导中的"添加全部"单击"下一步"。键入jpa.entitie
17、s作为包。确保已选中用于生成指定查询的复选框。单击"创立持久性单元",翻开"创立持久性单元"对话框。在对话框中单击"创立"以创立持久性单元并返回向导。可以保存持久性单元的缺省值。单击"下一步"。保存向导"映射选项"页面中的缺省值。单击"完成"。假设您希望在生成的实体中进一步定制标注,或集合类型,可以使用向导的"映射选项"页面。对本教程而言,缺省值已经绰绰有余。使用向导通过数据库创立实体类时,IDE会检查各表之间的关系。在"属性"窗口,展
18、开jpa.entities源包节点,可以看到IDE为除PROJECT_CONSULTANT表之外的每个表都生成了一个实体类。IDE没有为PROJECT_CONSULTANT创立实体类,因为该表是一个结合表。IDE还为具有复合主键的表CLIENT和PROJECT生成了两个额外的类。这些表的主键类ClientPK.java和ProjectPK.java在类名称后追加了"PK"。假设查看为实体类生成的代码,您可以发现向导为ID字段添加了GeneratedValue标记,并且为实体类的一些字段添加了Basicoptional="false"标注元素。基于Basi
19、coptional="false"的标注元素,"通过实体类创立JSF页"向导可以生成实现防止非可空列冲突的必要检查的代码。编辑实体类假设需要,您如今就可以修改生成的实体类。在本练习中,您将修改实体类toString方法的实现。您还将修改Client和Recruiter类中的标注,从而将客户和雇员的关系由一对多改为一对一。由于雇员与咨询参谋间已经存在了可空的一对多关系,出于在本教程中进展演示的目的,您将在客户和雇员间建立起可空的一对一关系。注意:本教程的这一部分为可选内容,在使用"通过实体类创立JSF页"向导生成JSF页面之前无需对实体
20、类做任何更改。编辑Address.java翻开"Address"实体类并进展以下更改。修改toString方法的return语句以返回完好的地址:return line1+","+line2+","+city+","+region+","+country+","+postalCode;可以使用IDE的代码完成功能来帮助您添加字段。如有必要,修复导入并保存更改。编辑Billable.java翻开Billable实体类并进展以下更改。修改toString方法的return语句,以
21、返回description、consultant id和project:public String toStringreturn description+","+consultantId+","+project;如有必要,修复导入并保存更改。编辑Client.java修改recruiterCollection字段的OneToMany标注,改为一对一关系,将字段由Collection改为Recruiter recruiter。OneToOnemappedBy="client"private Recruiter recruiter;根据字
22、段名的变化修改Collection Recruiter recruiterCollection的getter和setter方法。新的getter和setter方法如下所示:public Recruiter getRecruiterreturn recruiter;public void setRecruiterRecruiter recruiterthis.recruiter=recruiter;使用"插入代码"对话框删除Collection Recruiter recruiterCollection的getter和setter方法然后为Recruiter recruite
23、r生成新的getter和setter方法会更加容易。要创立新的getter和setter方法,请右键单击源代码,选择"插入代码Alt-Insert"然后选择"Getter和Setter"。在"生成Getter和Setter"对话框中选择recruiter,并单击"生成"。修改toString方法的return语句,以返回String.valueOfclientPK。public String toStringreturn String.valueOfclientPK;如有必要,修复导入并保存更改。编辑ClientP
24、K.java修改toString方法的return语句以返回client name和department number。public String toStringreturn clientName+","+"Dept."+clientDepartmentNumber;如有必要,修复导入并保存更改。编辑Consultant.java修改toString方法的return语句以返回email。public String toStringreturn email;如有必要,修复导入并保存更改。编辑ConsultantStatus.java修改toString
25、方法的return语句以返回status ID和description。public String toStringreturn statusId+","+description;如有必要,修复导入并保存更改。编辑Project修改toString方法的return语句以返回以下内容:public String toStringreturnprojectPK=null?"unnamed project":projectPK.getProjectName+","+client;如有必要,修复导入并保存更改。编辑Recruiter.jav
26、a修改client字段的ManyToOne标注,将关系标示为一对一关系。OneToOne private Client client;修改toString方法的return语句以返回email。public String toStringreturn email;如有必要,修复导入并保存更改。通过实体类生成JSF页创立实体类之后,您可以创立用于显示和修改数据的Web接口。您将使用"通过实体类创立JSF页"向导生成JavaServer Faces页面。向导生成的代码包括基于实体类标注的检验。该向导还提供了以下选择:通过用Dynamic Faces技术扩展JavaServer
27、Faces技术,在应用程序中启用Ajax功能。向导对每个实体类都生成了以下内容:一个JPA控制器类一个JSF控制器类一个JSF转换器类一个包含四个JSP文件的目录:Detail.jsp、Edit.jsp、List.jsp、New.jsp针对faces-config.xml中的类的受管bean元素、转换器元素和导航规那么该向导还会生成由控制器类所使用的类。JPA控制器使用的异常类JSF控制器使用的实体类生成JSF页面:请在"工程"窗口中右键单击工程节点并选择"新建""通过实体类创立JSF页面"以翻开"通过实体类创立JSF页&q
28、uot;向导。向导的"可用表"面板列示了工程的七个实体类。向导并未列示可嵌入类ClientPK.java和ProjectPK.java单击"全部添加",将所有类挪动至向导的"选定的实体类"面板。单击"下一步"。键入jpa.controllers作为"JPA控制器包"。键入jsf作为"JSF类包"。选择生成的支持Ajax的页面。单击"完成"。单击"完成"后,IDE将为jpa.controllers包的实体类创立JPA控制器类,为jsf包的
29、实体类创立JSF转换器类和JSF控制器类。每个JPA控制器类通过Java持久性API为相应的实体类处理操作,包括:创立、编辑和销毁实体类的实例。每个JSF转换器类实现由JavaServer Faces定义的javax.faces.convert.Converter接口,并执行将相应实体类的实例与String对象互相转换的操作。每个JSF控制器类专门针对相应生成的JSP,其中包括调用JPA控制器类方法的代码,并演示了要捕获的异常。总的来说,修改应用程序时,您希望修改JSF控制器类的控制器逻辑并使用生成的代码作为例子。展开"Web页面"节点,您可以看到IDE为每个实体类都生成了
30、一个文件夹。每个文件夹都包括文件Detail.jsp、Edit.jsp、List.jsp和New.jsp。IDE还通过为每个List.jsp页面插入链接修改了welcomeJSF.jsp。展开"源包"节点,您可以看到由向导生成的控制器、转换器、异常和实用程序类。展开"配置文件"节点并在XML编辑器中翻开faces-config.xml,您可以看到IDE为每个控制器类和转换器类都插入了受管bean和转换器元素。IDE还为每个JSP插入了一个导航规那么元素,用于指示导致应用程序导航到该JSP的逻辑结果。在应用程序中启用Ajax在"通过实体类创立JS
31、F页面"向导的最终面板中,您可以选择生成的支持Ajax的页面,通过JSF框架的Dynamic Faces扩展在应用程序中启用Ajax功能。向导将所需的"JSF扩展"库添加到该工程并配置应用程序的部署描绘符,从而启用Ajax生命周期。有关Dynamic Faces JSF扩展的更多信息,请参见JavaServer Faces技术扩展站点。假设选择该选项,向导会执行以下操作。将"JSF扩展"库添加到工程jsf-extensions-common、jsf-extensions-dynamic-faces、commons-logging和shale-r
32、emoting,这是在工程中使用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文件检查是否呈现
33、了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例
34、如,桌面应用程序的其他应用程序中使用JPA控制器类,以操作实体类并管理实体持久性。借助"基于实体类的JPA控制器类"向导,您可以轻松地在工程中创立JPA控制器类。要创立JPA控制器类,请在"持久性"类别中翻开"新建文件"向导,并选择"通过实体类生成JPA控制器类"。在向导中,指定JPA控制器类所针对的实体类,然后指定IDE创立该文件的位置。该向导还会自己创立JPA控制器类所使用的异常类。生成JPA控制器之后,可以从其它文件访问这些控制器方法。如更新数据库架构,可再次运行"通过数据库创立实体类"和
35、"通过实体类创立JPA控制器"向导以更新数据。假设愿意,创立JPA控制器类之后,可运行"通过实体类创立JSF页"向导并指定现有JPA控制器类包,在这种情况下,您将利用现有的JPA控制器类而非重新生成。向数据库添加数据创立应用程序之后,可以部署并运行该应用程序。您创立的"Consulting Agency"数据库尚未被填充。需通过Web接口或通过运行SQL脚本为数据库添加数据。添加数据后,您将看到各表之间的关系如何运行。使用SQL脚本添加数据假设不希望通过Web形式添加数据,您可以运行包含在derby-consult.zip中的derb
36、y_insert_data_consult.sql脚本。从主菜单项选择择"文件翻开文件",翻开derby_insert_data_consult.sql。文件将自动在SQL编辑器中翻开。请确保在SQL编辑器工具栏的连接下拉列表中选定了consult数据库,在工具栏中单击"运行SQL"按钮。您可以在"输出"窗口中查看脚本运行的结果。注意:假设正在使用的是MySQL数据库效劳器,请翻开包含在mysql-consult.zip中的mysql_insert_data_consult.sql文件。使用Web接口添加数据可通过在阅读器中启动该应用
37、程序并通过Web表单添加数据的形式为数据库添加数据。在主工具栏中单击"运行主工程"。IDE将保存所有修改的文件,重新生成应用程序并将其部署到效劳器中。缺省Web阅读器翻开到以下本地址:单击"显示全部地址条目"并单击"新建地址"。将以下数据添加到"New Address"表单。字段值Line1100 Data Street Line2Suite 432 CitySan Francisco区域California CountryUSA PostalCode94103单击"创立"单击索引以返回到索引页
38、面。单击"显示全部客户条目"并单击"新建客户"在"New Client"表单中,添加以下数据。字段值ClientDepartmentNumber2000 Client NameBig Data Corp.Contact Emailaccountingbigdatacorp Contact Passwordaccounting从下拉列表的BillingAddress中选择"Palm Spring Street"。单击"创立",再单击"索引",返回到索引页面。单击"显示
39、全部Project条目"并单击"新建工程"。在"New Project"表单中添加以下数据.字段值ProjectNameSecret Project ContactEmailproject.managerbigdatacorp ContactPasswordproject.manager单击"创立",再单击"索引",返回到索引页面。单击"显示全部Consultant Status条目"并单击"新建Consultant Status"在新的ConsultantStat
40、us表单中添加以下数据。字段值StatusIdA描绘活动单击"创立",再单击"索引",返回到索引页面。单击"显示全部Consultant条目"然后单击"新建Consultant"。在新Consultant表单中添加以下数据字段值电子邮件janet.smartjsfcrudconsultants 口令janet.smart HourlyRate80 BillableHourlyRate120在ProjectCollection字段中选择"Secret Project"。从StatusId下拉列表中
41、选择A,Active。单击"创立",再单击"索引",返回到索引页面。单击显示全部Billable条目并单击"新建Billable"将以下数据添加到"New Billable"表单中。字段值StartDate2020-10-13 00:00:00.0 EndDate2020-10-17 00:00:00.0小时40 HourlyRate80 BillableHourlyRate120描绘begin gathering requirements ConsultantIdjanet.smartjsfcrudconsult
42、ants 工程Secret Project Click Create and then click New Billable.将以下数据添加到"New Billable"表单中。这次,将在描绘字段中键入finish gathering requirements。字段值StartDate2020-10-20 00:00:00.0 EndDate2020-10-24 00:00:00.0小时40 HourlyRate80 BillableHourlyRate120描绘finish gathering requirements ConsultantIdjanet.smartjsfcrudconsultants 工程Secret Project单击"创立"并返回到索引页面。单击"显示全部R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论