




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSF页面通过受管Bean访问数据库 本讲原代码 06jpaTest zip 提纲 创建数据库表和实体类通过JSF向表中添加数据通过JSF显示数据列表实现记录间的导航删除记录按条件查询将查询结果与其它页面共享 在受管Bean中用JPA访问数据库的系统结构示意图 数据项 数据项 1 创建数据库表和实体类 在示例数据库中创建一个简单的表Student 仅包含id name两个字段将id设定为key创建一个使用JavaServerFaces JSF2 框架的WEB应用项目设项目名为jpaTest根据Student表创建实体类Student class应用netbeans的向导 基于数据库生成实体类同时创建持久性单元 1 1实体类 Entity Table name STUDENT publicclassStudentimplementsSerializable privatestaticfinallongserialVersionUID 1L Id Basic optional false Column name ID privateStringid Column name NAME privateStringname 2 通过JSF页面向表中添加数据 基本的JSF由两个部分构成 Facelets页面文件和用Java实现的受管Bean创建受管Bean 定义一个Student类型的实例成员current 设置其setters getters添加用JPA访问数据库的代码实现添加实体的功能创建添加实体的JSF页面 2 1支持访问数据库的受管Bean ManagedBean SessionScopedpublicclassStudentMB 从WEB容器注入实体管理器对象 引用持久性单元jpaTestPU PersistenceContext unitName jpaTestPU privateEntityManagerem 引用用户管理的事务管理器 Resourceprivatejavax transaction UserTransactionutx Studentcurrent protectedvoidpersist Objectobject try utx begin em persist object 添加一个实体到数据库中mit catch Exceptione getters setters 2 1受管Bean续 创建一个新实例 准备接受新数据publicStringaddPrepare current newStudent return stuEdit 跳转到stuEdit xhtml页面 将编辑后的实体保存到数据库中publicvoidsave persist current 2 2向index xhtml页面中加入添加记录的命令按钮 向index xhtml的body区中加入以下代码 2 3页面stuEdit xhtml 创建一个JSF页面 将名称设为stuEdit body区代码如下 编辑学生信息学号 姓名 2 4小结 通过一个简单的受管Bean和一个JSF页面 即可向数据库中添加记录 3通过JSF显示数据列表 3 1修改受管Bean 实现访问实体列表向StudentMB类中加入类型为List的items成员 加入查询语句 将查询结果赋值给items 3 2创建显示实体列表的JSF页面 3 1受管Bean中的列表定义和查询 booleandbInited false 设置一个初始化标志 防止不必要的反复查询数据库privateListitems publicListgetItems if dbInited initDB returnitems voidinitDB Queryquery em createQuery selectsfromStudents items query getResultList dbInited true 3 2创建显示实体列表的JSF页面 创建名为stuList xhtml页面 body区内代码如下 学生列表学号 item id 姓名 item name 3 3运行stuList页面 向index xhtml页面中加入对stuList的引用按钮 学生列表也可直接在浏览器输入 stuList jsf运行 4实现记录间的导航 创建一个页面 上面部分显示当前记录明细下面包含两个按钮 上一个 下一个 用于顺序翻阅不同记录 修改受管Bean 添加两个方法 分别响应两个按钮事件 实现当前记录的切换 4 1让受管Bean支持记录切换 intindex 0 用于记录列表中当前实体的序号 上一个publicvoidprev if index 0 index current items get index 下一个publicvoidnext if index items size 1 index current items get index 4 2支持导航的页面代码 创建名为stuNav xhtml的JSF页面 body区内代码为 浏览学生信息学号 姓名 5删除记录 5 1修改受管Bean 添加删除记录的方法5 2给浏览页面添加删除按钮 5 1实现删除操作的受管Bean代码 删除当前实体publicvoiddelete try utx begin current em find Student class current getId em remove current mit items remove current 设置新的 当前 索引和当前实体if index items size 5 2给浏览页面添加删除按钮 浏览学生信息学号 姓名 6按条件查询 6 1创建一个实现查询功能的受管Bean定义成员存放表示查询条件的参数构造查询语句向数据库发送查询语句将查询结果存放到List类型的items成员中 6 2创建一个输入查询条件 并显示查询结果的JSF页面页面效果如下所示 6 1实现查询功能的受管Bean ManagedBean SessionScopedpublicclassStudentQueryMB privateStringfield 查询条件的字段名privateStringlogic 逻辑条件 items 查询结果privateStringqueryStr selectsfromStudents 最基本的查询语句 无条件 PersistenceContext unitName jpaTestPU EntityManagerem 6 1查询受管Bean代码 续 publicvoidquery StringcondStr s field logic if value isEmpty condStr 如果条件值为空 将整个查询语句视为空if logic equals like condStr condStr isEmpty condStr value elsecondStr condStr isEmpty condStr value 初始状态queryStr selectsfromStudents 最终的查询语句由三部分构成 querySt queryStr where condStr 构造查询语句如果查询条件为空 则查出全部记录queryStr condStr isEmpty queryStr queryStr where condStr items em createQuery queryStr getResultList 6 2创建查询JSF页面 查询表达式 6 3查询结果页面stuFindRST xhtml 查询页面body区代码为 查询结果学号 item id 姓名 item name 6 4向Index xhtml中加入启动查询页面的按钮 页面body区代码为 学生列表 7 将查询结果与其它页面共享 问题 以上第三 四小节中 页面显示的数据来自StudentMB的items中第六小节查询结果存放在StudentQueryMB的items中如何将查询结果作用于所有其它各个页面 在不同受管Bean之间如何交换数据 答案 通过它们共同的Session交换数据 将查询结果items保存在Session对象的属性 items 中 向页面输出的数据从Session对象的items中取出 7 1修改查询Bean 向StudentQueryMB的query方法中添加红色标记的代码行 publicvoidquery 构造查询条件字符串StringcondStr s field logic if value isEmpty condStr 如果条件值为空 将整个查询语句视为空if logic equals like condStr condStr isEmpty condStr value elsecondStr condStr isEmpty condStr value queryStr condStr isEmpty basicQueryStr basicQueryStr where condStr items em createQuery queryStr getResultList FacesContextfc FacesContext getCurrentInstance HttpSessionsession HttpSession fc getExternalContext getSession true session setAttribute items items 将items对象保存到公共区间session中 7 2修改StudentMB的getItems 向StudentMB的getItems方法中添加红色标记的代码行 publicListgetItems if dbInited initDB else HttpSessionsession HttpSession FacesContext getCurrentInstance getExternalContext getSession true items List session getAttribute items returnitems 7 2修改StudentMB的initDB voidinitDB Queryquery em createQuery selectsfromStudents query setMaxResults 100 query setFirstResult 0 items query getResultList HttpSessionsession HttpSession FacesContext getCurrentInstance getExternalContext getSession true session setAttribute items items dbInited true 总结 直接通过受管Bean访问数据库的要点如下 从WEB容器注入实体管理器对象 PersistenceContext unitName jpaTestPU privateEntityManagerem 2 注入用户事务管理器 Resourceprivatejavax transaction UserTransactionutx 3 用实体管理器实现实体与数据库的转换entityObjct newStudent 创建新实体对象em persist entityObject 保存实体对象到数据库query em createQuery 创建查询对象ListItems query getResultList 得取查询结果4 通过Session对象实现同一会话中不同页面 受管Bean之间
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议补充协议:财产分割及子女抚养费用调整范本
- 专利权质押担保合同设计要点与执行细则
- 矿山合作协议与承包权投资合作及风险控制协议
- 社区党组织书记选拔任用事业编制合同范本
- 班组本质安全培训教程课件
- 油气行业安全培训
- 光纤光栅传感课件
- 开叉车技术考试题及答案
- 文化旅游资金申请2025年政策环境与市场分析报告
- 建设银行2025文山壮族苗族自治州秋招笔试价值观测评题专练及答案
- 2025年大麻酚油(CBD油)行业研究报告及未来行业发展趋势预测
- 行政执法常识考试题库及答案
- 山东省潍坊市2025-2026学年上学期高三开学调研监测语文试题参考答案
- 钢结构隔断施工方案(3篇)
- 2025年IT技术支持工程师招聘面试技巧与模拟题答案
- 退休业务办理培训课件
- 2025-2026学年沪教版(五四学制)(2024)小学体育与健康三年级(全一册)教学设计(附目录)
- 2025-2026学年苏少版七年级美术上册(全册)教学设计(附目录)
- 2025新离婚协议书
- 浙江省A9协作体暑假返校联考物理试题及答案
- 2025年基金从业资格考试《证券投资基金基础知识》真题(附答案)
评论
0/150
提交评论