CN102799423A - Jsf中执行动态方法的方法及装置 - Google Patents

Jsf中执行动态方法的方法及装置 Download PDF

Info

Publication number
CN102799423A
CN102799423A CN2011101407666A CN201110140766A CN102799423A CN 102799423 A CN102799423 A CN 102799423A CN 2011101407666 A CN2011101407666 A CN 2011101407666A CN 201110140766 A CN201110140766 A CN 201110140766A CN 102799423 A CN102799423 A CN 102799423A
Authority
CN
China
Prior art keywords
trustship
bean
expression formula
title
name
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011101407666A
Other languages
English (en)
Other versions
CN102799423B (zh
Inventor
周发志
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Kingdee Tianyanyun Computing Co Ltd
Original Assignee
Shenzhen Kingdee Middleware Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Kingdee Middleware Co ltd filed Critical Shenzhen Kingdee Middleware Co ltd
Priority to CN201110140766.6A priority Critical patent/CN102799423B/zh
Publication of CN102799423A publication Critical patent/CN102799423A/zh
Application granted granted Critical
Publication of CN102799423B publication Critical patent/CN102799423B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

一种JSF中执行动态方法的方法,包括以下步骤:对方法进行注册得到方法表达式,并存储在数据库中;执行方法时从数据库中查询方法表达式;根据所述方法表达式调用方法。采用上述方法,能够节省存储空间,并能减少数据库与应用程序之间的数据传输,提高系统运行性能。此外,还提供了一种JSF中执行动态方法的装置。

Description

JSF中执行动态方法的方法及装置
【技术领域】
本发明涉及计算机应用领域,尤其涉及一种JSF中执行动态方法的方法及装置。
【背景技术】
JSF(Java Service Face,用户接口组件框架)是一种用于构建Web应用程序的新标准Java框架。在JSF中,当要调用一个方法时,具体要执行的方法并不是固定的,而是需要根据当时的环境动态的决定。例如,要从数据库中删除ID为123的用户,该用户可能是老师也可能是学生,如果是老师,则执行del()方法,如果是学生,则执行remove()方法,而开发人员在编写删除用户的逻辑时,是无法决定具体要执行哪个方法的。因此,在动态执行时需要满足一定的上下文环境参数,根据环境参数将抽象逻辑转换为具体业务场景下的具体逻辑。
传统的JSF中动态执行的方法中,为了在动态执行时满足一定的环境参数,通常的做法有三种:
(1)使用逻辑判断执行环境的信息,以确定要执行的方法。然而这种方法需要初始化所有的环境参数到同一个地方,而在实际应用中可能只使用到一个环境参数,其他永远不会使用到,那么这些不会使用到的环境参数的初始化就是多余的;此外,要添加新的子类时,则开发人员要修改相应的代码。
(2)将动态执行所需要的全部信息保存在数据库或其它持续性存储设备中,在需要执行动态方法时再根据保存的信息恢复上下文环境参数,再执行相应的方法。然而,这种方法由于要将非基本类型的环境参数系列化保存到数据库中。而一般数据库只能存储基本类型数据,非基本类型的参数在保存前都要进行复杂对象与简单数据间的转换,读取时还要进行反向转换,比如系列化与反系列化。所谓系列化是指把数据对象表示为等价的字符串,反系列化是指将字符串系列还原成数据对象。系列化与反系列化需要一定的转换算法实现,这种算法既复杂又效率低。另外,将环境参数保存在数据库中,执行方法时需要从数据库读取,数据库服务器与应用程序之间需要传输较多数据,从而会影响系统运行性能。
(3)将要执行的动态方法的指针记录在数据库或其他持续性存储设备中,然后在需要执行动态方法的地方先找到要执行的方法,最后用反射调用相应的方法。然而,这种方法完全丢失了上下文环境参数,在实际应用中,如果依赖环境的话仍然需要存储上下文环境参数。
【发明内容】
基于此,有必要提供一种即能节省存储空间又能减少数据库与应用程序之间的数据传输,从而能提高系统性能的JSF中执行动态方法的方法。
一种JSF中执行动态方法的方法,包括以下步骤:对方法进行注册得到方法表达式,并存储在数据库中;执行方法时从数据库中查询方法表达式;根据所述方法表达式调用方法。
优选的,所述对方法进行注册得到方法表达式的步骤为:获取托管Bean的名称和方法名;组合所述托管Bean的名称和方法名,得到方法表达式。
优选的,所述获取托管Bean的名称的步骤为:获取输入的类名;根据所述类名使用工具类计算得到托管Bean的名称。
优选的,所述从数据库中查询方法表达式的步骤之前还包括:将方法执行时所需实参保存在数据库中。
优选的,所述根据所述方法表达式调用方法的步骤为:根据所述方法表达式解析出托管Bean的名称和方法名;根据所述托管Bean的名称创建托管Bean对象;从所述托管Bean对象中获取环境参数,根据所述环境参数调用所述方法名对应的方法。
此外,还有必要提供一种既能节省存储空间又能减少数据库与应用程序之间的数据传输,从而能提高系统性能的JSF中执行动态方法的装置。
一种JSF中执行动态方法的装置,包括:注册模块,用于对方法进行注册,得到方法表达式;数据库,用于存储所述方法表达式;查询模块,用于在执行方法时从所述数据库中查询方法表达式;执行模块,用于根据所述查询到的方法表达式调用方法。
优选的,所述注册模块包括:获取模块,用于获取托管Bean的名称和方法名;组合模块,用于组合所述托管Bean的名称和方法名,得到方法表达式。
优选的,所述获取模块用于获取输入的类名,并根据所述类名使用工具类计算得到托管Bean的名称。
优选的,所述数据库还用于保存方法执行时所需实参。
优选的,所述执行模块包括:解析模块,用于根据所述方法表达式解析出托管Bean的名称和方法名;创建模块,用于根据所述托管Bean的名称创建托管Bean对象;调用模块,用于从所述托管Bean对象中获取环境参数,根据所述环境参数调用所述方法名对应的方法。
上述JSF中执行动态方法的方法及装置,通过将方法注册得到的方法表达式存储在数据库中,在执行方法时则根据方法表达式来调用方法,无需将环境参数存储在数据库中,方法执行时使用JSF中的方法表达式技术就可以恢复环境参数,从而不需要从数据库恢复环境参数,这样,既节省了存储空间,又能减少数据库与应用程序之间的数据传输,提高了系统运行性能。
【附图说明】
图1为一个实施例中JSF执行动态方法的方法流程图;
图2为图1中对方法进行注册得到方法表达式的流程图;
图3为图2中获取托管Bean的名称的方法流程图;
图4为图1中根据方法表达式调用方法的流程图;
图5为一个实施例中JSF中执行动态方法的装置的结构示意图;
图6为图5中的注册模块的结构示意图;
图7为图5中的执行模块的结构示意图。
【具体实施方式】
在一个实施例中,如图1所示,一种JSF中执行动态方法的方法,包括以下步骤:
步骤S10,对方法进行注册得到方法表达式,并存储在数据库中。
在一个实施例中,如图2所示,步骤S10中对方法进行注册得到方法表达式的具体过程为:
步骤S102,获取托管Bean的名称和方法名。
JavaBean是一种Java语言写成的可重用组件。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创建的对象进行打包,并且其它开发者也可以通过内部的JSP页面、Servlet、其他JavaBean、Applet程序或者应用来使用这些对象。托管Bean(Managed Bean)是JSF中由框架负责管理其生命周期的一种JavaBean,它的创建、初始化、销毁等生命周期行为都由JSF框架负责完成。一个托管Bean描述了一个JavaBean如何创建和管理的。
在一个实施例中,如图3所示,步骤S102中获取托管Bean的名称的具体过程如下:
步骤S112,获取输入的类名。
不同的托管Bean,其托管Bean的名称是不一样的。JSF中,使用通用的工具类,就可以根据托管Bean的类名来计算得到当前的托管Bean的名称。
步骤S122,根据类名使用工具类计算得到托管Bean的名称。
用户只需要输入一个参数,即托管Bean的类名,使用工具类就可以自动计算出托管Bean的名称。
步骤S102中获取方法名可以是用户提供的方法名或预先约定的方法名。若预先未约定方法名,则用户需要输入类名和方法名,若预先约定了方法名,例如约定所有托管Bean里特定用户的方法名都叫remove,那么用户只需要输入类名即可。
步骤S104,组合托管Bean的名称和方法名,得到方法表达式。
方法表达式是表达式语言(Expression Language,EL)中的一种,方法表达式允许调用一个任意类的任意公用(public)方法,可以在调用时传递一系列参数,如果调用的方法有返回值的话,方法表达式可以返回这个返回值。
该实施例中,方法表达式为托管Bean的名称+方法名。例如,组合托管Bean和方法名得到的方法表达式为:String el=″#{″+elFromDB+″.methodName}″,其中,el表示方法表达式,String表示该方法表达式的数据类型为字符串型,″+elFromDB+″为托管Bean的名称,methodName为方法名。
该实施例中,将上述组合得到的方法表达式存储在数据库中,便于后续在执行方法时从数据库中取出方法表达式。
在一个实施例中,将方法执行时所需实参也保存在数据中。
在执行方法时,若方法只依赖于环境参数,而不依赖于非环境参数,则不需要保存实参,否则需要保存实参。例如,要进行一个通用的删除功能,对于不同的类(比如学生、课程、教师)有不同的删除方法,也可从不同的表中删除。在动态删除方法执行时,可能唯一关心的是删除哪一个对象(如哪个学生或哪个课程或哪个教师),即删除方法需要一条记录的关键字,该关键字即为实参。该实参在执行方法时先计算好,然后传递到动态方法中。例如,选择从表格中删除一个教师,先计算选择的教师的ID值teacherId,然后查找要执行的方法为teacherBean.removeTeacher,执行时实参为teacherId。
步骤S20,执行方法时从数据库中查找方法表达式。
步骤S30,根据方法表达式调用方法。
在一个实施例中,如图4所示,步骤S30的具体过程是:
步骤S302,根据方法表达式解析出托管Bean的名称和方法名。
JSF应用的运行环境即JSF引擎,步骤S302中,JSF引擎内的EL解析工具会将方法表达式自动分解,从而得到托管Bean的名称和方法名。
步骤S304,根据托管Bean的名称创建托管Bean对象。
托管Bean对象是托管Bean的一个实例,由托管Bean管理器来创建托管Bean对象。托管Bean管理器在创建托管Bean对象时,会自动初始化环境参数,因此,从托管Bean对象中能获取到方法执行时所需的环境参数。
步骤S306,从托管Bean对象中获取环境参数,根据所述环境参数调用所述方法名对应的方法。
由于托管Bean管理器在创建托管Bean对象时,会自动恢复环境参数,因此不需要事先将环境参数存储在数据库中,既节省了存储空间,又能减少数据库与应用程序之间的数据传输,提高了系统运行性能。
在一个实施例中,如图5所示,一种JSF中执行动态方法的装置,包括注册模块10、数据库20、查询模块30和执行模块40,其中:
注册模块10用于对方法进行注册,得到方法表达式。
在一个实施例中,如图6所示,注册模块10包括获取模块102和组合模块104,其中:
获取模块102用于获取托管Bean的名称和方法名。
在一个优选的实施例中,获取模块102获取输入的类名,根据类名使用工具类计算得到托管Bean的名称。该实施例中,用户只需要输入一个参数,即托管Bean的类名,获取模块102使用工具类就可以自动计算出当前的托管Bean的名称。
获取模块102获取方法名可以是用户提供的方法名或预先约定的方法名。若预先未约定方法名,则用户需要输入类名和方法名,若预先约定了方法名,例如约定所有托管Bean里特定用户的方法名都叫remove,那么用户只需要输入托管Bean的类名即可。
组合模块104用于组合托管Bean的名称和方法名,得到方法表达式。
组合模块104得到的方法表达式为托管Bean的名称+方法名。例如,组合托管Bean和方法名得到的方法表达式为:Stringel=″#{″+elFromDB+″.methodName}″,其中,el表示方法表达式,String表示该方法表达式的数据类型为字符串型,″+elFromDB+″为托管Bean的名称,methodName为方法名。
数据库20用于存储方法表达式。
在一个实施例中,数据库20还用于保存方法执行时所需实参。
查询模块30用于在执行方法时从数据库20中查询方法表达式。
执行模块40用于根据查询到的方法表达式调用方法。
在一个实施例中,如图7所示,执行模块40包括解析模块402、创建模块404和调用模块406,其中:
解析模块402用于根据方法表达式解析出托管Bean的名称和方法名。
该实施例中,解析模块402是JSF引擎内的EL解析工具,其会将方法表达式自动分解,从而得到托管Bean的名称和方法名。
创建模块404用于根据托管Bean的名称创建托管Bean对象。
在创建托管Bean对象时,会自动恢复环境参数。因此从托管Bean对象中能获取到方法执行时所需的环境参数。
调用模块406用于从托管Bean对象中获取环境参数,根据环境参数调用所述方法名对应的方法。
由于创建模块404在创建托管Bean对象时能够自动恢复环境参数,因此不需要事先将环境参数保存在数据库20中,节省了存储空间,又能减少数据库20与应用程序之间的数据传输,从而提高了系统运行性能。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种JSF中执行动态方法的方法,包括以下步骤:
对方法进行注册得到方法表达式,并存储在数据库中;
执行方法时从数据库中查询方法表达式;
根据所述方法表达式调用方法。
2.根据权利要求1所述的JSF中执行动态方法的方法,其特征在于,所述对方法进行注册得到方法表达式的步骤为:
获取托管Bean的名称和方法名;
组合所述托管Bean的名称和方法名,得到方法表达式。
3.根据权利要求2所述的JSF中执行动态方法的方法,其特征在于,所述获取托管Bean的名称的步骤为:
获取输入的类名;
根据所述类名使用工具类计算得到托管Bean的名称。
4.根据权利要求1所述的JSF中执行动态方法的方法,其特征在于,所述从数据库中查询方法表达式的步骤之前还包括:
将方法执行时所需实参保存在数据库中。
5.根据权利要求1至4中任意一项所述的JSF中执行动态方法的方法,其特征在于,所述根据所述方法表达式调用方法的步骤为:
根据所述方法表达式解析出托管Bean的名称和方法名;
根据所述托管Bean的名称创建托管Bean对象;
从所述托管Bean对象中获取环境参数,根据所述环境参数调用所述方法名对应的方法。
6.一种JSF中执行动态方法的装置,其特征在于,包括:
注册模块,用于对方法进行注册,得到方法表达式;
数据库,用于存储所述方法表达式;
查询模块,用于在执行方法时从所述数据库中查询方法表达式;
执行模块,用于根据所述查询到的方法表达式调用方法。
7.根据权利要求6所述的执行动态方法的装置,其特征在于,所述注册模块包括:
获取模块,用于获取托管Bean的名称和方法名;
组合模块,用于组合所述托管Bean的名称和方法名,得到方法表达式。
8.根据权利要求7所述的执行动态方法的装置,其特征在于,所述获取模块用于获取输入的类名,并根据所述类名使用工具类计算得到托管Bean的名称。
9.根据权利要求6所述的执行动态方法的装置,其特征在于,所述数据库还用于保存方法执行时所需实参。
10.根据权利要求6至9中任意一项所述的执行动态方法的装置,其特征在于,所述执行模块包括:
解析模块,用于根据所述方法表达式解析出托管Bean的名称和方法名;
创建模块,用于根据所述托管Bean的名称创建托管Bean对象;
调用模块,用于从所述托管Bean对象中获取环境参数,根据所述环境参数调用所述方法名对应的方法。
CN201110140766.6A 2011-05-27 2011-05-27 Jsf中执行动态方法的方法及装置 Active CN102799423B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110140766.6A CN102799423B (zh) 2011-05-27 2011-05-27 Jsf中执行动态方法的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110140766.6A CN102799423B (zh) 2011-05-27 2011-05-27 Jsf中执行动态方法的方法及装置

Publications (2)

Publication Number Publication Date
CN102799423A true CN102799423A (zh) 2012-11-28
CN102799423B CN102799423B (zh) 2015-07-29

Family

ID=47198540

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110140766.6A Active CN102799423B (zh) 2011-05-27 2011-05-27 Jsf中执行动态方法的方法及装置

Country Status (1)

Country Link
CN (1) CN102799423B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107168681A (zh) * 2017-03-31 2017-09-15 北京奇艺世纪科技有限公司 一种实时任务处理方法及装置
CN107729259A (zh) * 2016-08-11 2018-02-23 爱思开海力士有限公司 用于动态确定以执行读取回收操作的技术
CN107818020A (zh) * 2016-09-12 2018-03-20 平安科技(深圳)有限公司 参数传递方法和装置
CN108804166A (zh) * 2018-05-31 2018-11-13 阿里巴巴集团控股有限公司 确定业务资产的流动性指标的方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1142870A (zh) * 1993-12-02 1997-02-12 马克布伦德尔公司 机器间通信的方法与过程及其程序制备的一般化方法
US20080235661A1 (en) * 2007-03-21 2008-09-25 Computer Associates Think, Inc. System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1142870A (zh) * 1993-12-02 1997-02-12 马克布伦德尔公司 机器间通信的方法与过程及其程序制备的一般化方法
US20080235661A1 (en) * 2007-03-21 2008-09-25 Computer Associates Think, Inc. System and method for using annotations to automatically generate a framework for a custom javaserver faces (jsf) component

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CVM545: "《数据库里面存储的是函数名,怎么读出来后让它执行该函数》", 17 October 2007 *
卜炟等: "《零基础学Struts》", 31 December 2009, 机械工业出版社 *
徐明华等: "《JSF编程实战导航》", 31 December 2008, 清华大学出版社 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729259A (zh) * 2016-08-11 2018-02-23 爱思开海力士有限公司 用于动态确定以执行读取回收操作的技术
CN107729259B (zh) * 2016-08-11 2021-03-30 爱思开海力士有限公司 用于动态确定以执行读取回收操作的存储器装置及方法
CN107818020A (zh) * 2016-09-12 2018-03-20 平安科技(深圳)有限公司 参数传递方法和装置
CN107168681A (zh) * 2017-03-31 2017-09-15 北京奇艺世纪科技有限公司 一种实时任务处理方法及装置
CN108804166A (zh) * 2018-05-31 2018-11-13 阿里巴巴集团控股有限公司 确定业务资产的流动性指标的方法及装置

Also Published As

Publication number Publication date
CN102799423B (zh) 2015-07-29

Similar Documents

Publication Publication Date Title
CN107918666B (zh) 一种区块链上的数据同步方法和系统
CN102129425B (zh) 数据仓库中大对象集合表的访问方法及装置
JP2006107436A5 (zh)
US20200142674A1 (en) Extracting web api endpoint data from source code
CN111782703B (zh) 灌区对象数据间关联关系自动管理和展示的方法及系统
CN113254445A (zh) 实时数据存储方法、装置、计算机设备及存储介质
CN102799423A (zh) Jsf中执行动态方法的方法及装置
US8024374B2 (en) Computer object conversion using an intermediate object
CN101727505B (zh) 一种高效的数据处理方法及装置
CN109597825B (zh) 规则引擎调用方法、装置、设备及计算机可读存储介质
CN111026756A (zh) 一种表单动态生成和关联查询的方法
US11663245B2 (en) Initial loading of partial deferred object model
CN103809915B (zh) 一种磁盘文件的读写方法和装置
CN102508673A (zh) 快速开发与配置平台类软件的系统及方法
CN114816170A (zh) 规则方案生成方法、装置、介质及电子设备
CN102486731B (zh) 增强软件的软件调用栈的可视化的方法、设备和系统
CN101908174A (zh) 处理图纸文件中零部件对象信息的方法、装置及eap系统
CN102855115A (zh) 一种基于拼接墙显示文字标注的方法及系统
CN109240660B (zh) 一种广告数据的接入方法、存储介质、电子设备及系统
CN113704819B (zh) 一种应用日志的打码输出方法、装置及计算机可读存储介质
CN115905371A (zh) 数据趋势分析方法、装置、设备及计算机可读存储介质
CN102193947B (zh) 数据访问处理方法及系统
CN112162731B (zh) 数据扩展方法、装置、存储介质及电子装置
CN103927345A (zh) 一种jsp标签嵌套的方法及装置
CN112988817B (zh) 数据比对方法、系统、电子设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP03 Change of name, title or address

Address after: South South technology twelve road 518000 in Guangdong province Shenzhen City Guangdong streets Nanshan District high tech Industrial Park, No. 2, Kingdee Software Park building A floor 2 South Block

Patentee after: Shenzhen Kingdee middleware Limited by Share Ltd.

Address before: 518057 Guangdong City, Nanshan District province high tech Zone in the middle of the industrial zone of the sparrow tower M-6 building, floor 1, area 3, second, 4

Patentee before: Shenzhen Kingdee Middleware Co., Ltd.

CP01 Change in the name or title of a patent holder

Address after: South South technology twelve road 518000 in Guangdong province Shenzhen City Guangdong streets Nanshan District high tech Industrial Park, No. 2, Kingdee Software Park building A floor 2 South Block

Patentee after: Shenzhen Kingdee tianyanyun computing Co., Ltd.

Address before: South South technology twelve road 518000 in Guangdong province Shenzhen City Guangdong streets Nanshan District high tech Industrial Park, No. 2, Kingdee Software Park building A floor 2 South Block

Patentee before: Shenzhen Kingdee middleware Limited by Share Ltd.

CP01 Change in the name or title of a patent holder