计算机软件系统基于EL表达式实现Java方法直接调用的方法

文档序号:6601044阅读:315来源:国知局
专利名称:计算机软件系统基于EL表达式实现Java方法直接调用的方法
技术领域
本发明涉及计算机软件系统领域,特别涉及计算机软件系统中Java调用技术领 域,具体是指一种计算机软件系统中基于EL表达式实现Java方法直接调用的方法。
背景技术
在现代计算机软件系统中,Java语言和JSP已经被广泛应用,其中JSP中的 EUExpressionLanguage,表达式语言)表达式方便简单,并且方法调用在应用中的作用是 毋庸置疑的。现有技术中的EL表达式规则和功能,大概有以下两点(1)支持标准的JavabearKMapAist、数组的属性或者指定位置的数据取得;(2)支持各种基本运算符(比如加减乘除、逻辑运算、条件表达式等)。其中所存在的问题主要如下不支持直接的方法调用,比如${ “abc”.length()},是不可以的。这样就大大限制了其广泛的应用,给计算机软件系统的开发和利用带来了一定的障碍。

发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种能够支持EL表达式的 Java方法直接调用、有效解决EL表达式中变量值取值不灵活的问题、实现过程简单方便、 工作性能稳定可靠、适用范围较为广泛的计算机软件系统中基于EL表达式实现Java方法 直接调用的方法。为了实现上述的目的,本发明的计算机软件系统中基于EL表达式实现Java方法 直接调用的方法如下该计算机软件系统中基于EL表达式实现Java方法直接调用的方法,其主要特点 是,所述的方法包括以下步骤(1)在系统的后缀属性预定义信息中加入函数后缀定义实现信息;(2)在系统的EL表达式解析器进行后缀属性预定义信息解析操作中,增加函数后 缀定义的解析实现信息;(3)系统根据EL表达式中的Java方法调用信息查找到对应的Java方法,并调用 执行该Java方法。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的后缀属性 予页定义信息为 org. apache, commons, el. PropertySuffix 中的信息。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的EL表达 式解析器为org. apache, commons, el. parser. ELParser 角军该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的系统根据EL表达式中的Java方法调用信息查找到对应的Java方法,包括以下步骤(11)系统提取EL表达式中的Java方法调用信息中的方法名称信息和参数信息;(12)系统根据所述的方法名称信息和参数信息进行对应的Java方法匹配查找处 理;(13)如果查找到对应的Java方法,则根据该Java方法的参数类型要求,对所述的 参数信息进行类型强制转换,并返回上述步骤(3);(14)如果无法查找到对应的Java方法,则结束。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的根据方法名称信息和参数信息进行对应的Java方法匹配查找处理,包括以下步骤(121)系统判断与所述的方法名称信息相同的Java方法是否存在;(122)如果存在,则判断相应的Java方法所要求的参数个数是否与所述的参数信 息相一致,且判断参数类型是否相符合;否则返回无法查找到对应的Java方法的结果;(123)如果有满足以上条件的Java方法,则判断该满足以上条件的Java方法是否 有多个;如果有多个,则从中随机选择一个Java方法,并返回查找到对应的Java方法的结 果;否则选择该Java方法,并返回查找到对应的Java方法的结果;(124)如果没有满足以上条件的Java方法,则从方法名称相同且参数个数相同的 Java方法中随机选择一个Java方法,并返回查找到对应的Java方法的结果。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的参数类型 相符合的条件为(l)byte、Byte、short、Short、int、Integer、long、Long、float、Float、double、 Double、BigInteger, BigDecimal,互为相符合的参数类型;(2) char、Character、String,互为相符合的参数类型;(3) boolean、Boolean,互为相符合的参数类型;(4)子类、父类,互为相符合的参数类型。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中还包括以下 步骤(4)在系统的EL表达式解析器进行函数调用信息解析操作中,增加工具类函数后 缀定义的解析实现信息;(5)系统根据EL表达式中的工具类Java方法调用信息查找到对应的工具类Java 方法,并调用执行该工具类Java方法。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的函数调用 信息为 org. apache, commons, el. FunctionInvocation 中的信息。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的系统根据 EL表达式中的工具类Java方法调用信息查找到对应的工具类Java方法,包括以下步骤(21)系统提取EL表达式中的工具类Java方法调用信息中的方法名称信息和参数 fn息;(22)系统根据所述的方法名称信息和参数信息进行对应的工具类Java方法匹配 查找处理;(23)如果查找到对应的工具类Java方法,则根据该工具类Java方法的参数类型要求,对所述的参数信息进行类型强制转换,并返回上述步骤(5);
(24)如果无法查找到对应的工具类Java方法,则结束。 该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的根据方法 名称信息和参数信息进行对应的工具类Java方法匹配查找处理,包括以下步骤 (221)系统判断与所述的方法名称信息相同的工具类Java方法是否存在;(222)如果存在,则判断相应的工具类Java方法所要求的参数个数是否与所述的 参数信息相一致,且判断参数类型是否相符合;否则返回无法查找到对应的工具类Java方 法的结果;(223)如果有满足以上条件的工具类Java方法,则判断该满足以上条件的工具类 Java方法是否有多个;如果有多个,则从中随机选择一个工具类Java方法,并返回查找到 对应的工具类Java方法的结果;否则选择该工具类Java方法,并返回查找到对应的工具类 Java方法的结果;(224)如果没有满足以上条件的工具类Java方法,则从方法名称相同且参数个 数相同的工具类Java方法中随机选择一个工具类Java方法,并返回查找到对应的工具类 Java方法的结果。该计算机软件系统中基于EL表达式实现Java方法直接调用的方法中的参数类型 相符合的条件为(l)byte、Byte、short、Short、int、Integer、long、Long、float、Float、double、 Double、BigInteger, BigDecimal,互为相符合的参数类型;(2) char、Character、String,互为相符合的参数类型;(3) boolean、Boolean,互为相符合的参数类型;(4)子类、父类,互为相符合的参数类型。采用了该发明的计算机软件系统中基于EL表达式实现Java方法直接调用的方 法,由于其中通过对后缀属性预定义信息中加入函数后缀定义实现信息,并在系统的EL表 达式解析器进行后缀属性预定义信息解析操作中增加函数后缀定义的解析实现信息,从而 使得用户不仅可以直接方便的使用EL表达式对数据进行运算,而且可以直接调用Java方 法,不仅可以使用在EOS的图形化编程的图元以及richweb的标签中,而且实现了支持EL 表达式的Java方法直接调用,有效解决了 EL表达式中变量值取值不灵活的问题,同时实现 过程简单方便,工作性能稳定可靠,适用范围较为广泛。


图1为本发明的计算机软件系统中基于EL表达式实现Java方法直接调用的方法 中在系统的后缀属性预定义信息中加入函数后缀定义实现信息的示意图。图2为本发明的计算机软件系统中基于EL表达式实现Java方法直接调用的方法 中增加函数后缀定义的解析实现信息的示意图。
具体实施例方式为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。请参阅图1和图2所示,该计算机软件系统中基于EL表达式实现Java方法直接调用的方法,其主要特点是,所述的方法包括以下步骤(1)在系统的后缀属性预定义信息中加入函数后缀定义实现信息;该后缀属性预 定义信息为 org. apache, commons, el. PropertySuffix 中的信息;(2)在系统的EL表达式解析器进行后缀属性预定义信息解析操作中,增加函数后 缀定义的解析实现信息;该EL表达式解析器为org. apache, commons, el. parser. ELParser 解析器;(3)系统根据EL表达式中的Java方法调用信息查找到对应的Java方法,并调用 执行该Java方法,包括以下步骤(a)系统提取EL表达式中的Java方法调用信息中的方法名称信息和参数信息;(b)系统根据所述的方法名称信息和参数信息进行对应的Java方法匹配查找处 理,包括以下步骤(i)系统判断与所述的方法名称信息相同的Java方法是否存在; (ii)如果存在,则判断相应的Java方法所要求的参数个数是否与所述的参数信 息相一致,且判断参数类型是否相符合;否则返回无法查找到对应的Java方法的结果;该 参数类型相符合的条件为(I)byte、Byte、short、Short、int、Integer、long、Long、float、Float、double、 Double、BigInteger, BigDecimal,互为相符合的参数类型;(II) char、Character、String,互为相符合的参数类型;(III) boolean、Boolean,互为相符合的参数类型;(IV)子类、父类,互为相符合的参数类型;(iii)如果有满足以上条件的Java方法,则判断该满足以上条件的Java方法是否 有多个;如果有多个,则从中随机选择一个Java方法,并返回查找到对应的Java方法的结 果;否则选择该Java方法,并返回查找到对应的Java方法的结果;(iv)如果没有满足以上条件的Java方法,则从方法名称相同且参数个数相同的 Java方法中随机选择一个Java方法,并返回查找到对应的Java方法的结果;(c)如果查找到对应的Java方法,则根据该Java方法的参数类型要求,对所述的 参数信息进行类型强制转换,并返回上述步骤(3);(d)如果无法查找到对应的Java方法,则结束;(4)在系统的EL表达式解析器进行函数调用信息解析操作中,增加工具类函数后 缀定义的解析实现信息;该函数调用信息为org. apache, commons, el. FunctionInvocation 中的信息;(5)系统根据EL表达式中的工具类Java方法调用信息查找到对应的工具类Java 方法,并调用执行该工具类Java方法,包括以下步骤(a)系统提取EL表达式中的工具类Java方法调用信息中的方法名称信息和参数 fn息;(b)系统根据所述的方法名称信息和参数信息进行对应的工具类Java方法匹配 查找处理,包括以下步骤(i)系统判断与所述的方法名称信息相同的工具类Java方法是否存在;(ii)如果存在,则判断相应的工具类Java方法所要求的参数个数是否与所述的参数信息相一致,且判断参数类型是否相符合;否则返回无法查找到对应的工具类Java方 法的结果;该参数类型相符合的条件为(I)byte、Byte、short、Short、int、Integer、long、Long、float、Float、double、 Double、BigInteger, BigDecimal,互为相符合的参数类型;(II) char、Character、String,互为相符合的参数类型;(III) boolean、Boolean,互为相符合的参数类型;(IV)子类、父类,互为相符合的参数类型;(iii)如果有满足以上条件的工具类Java方法,则判断该满足以上条件的工具类 Java方法是否有多个;如果有多个,则从中随机选择一个工具类Java方法,并返回查找到 对应的工具类Java方法的结果;否则选择该工具类Java方法,并返回查找到对应的工具类 Java方法的结果;(iv)如果没有满足以上条件的工具类Java方法,则从方法名称相同且参数个数相同的工具类Java方法中随机选择一个工具类Java方法,并返回查找到对应的工具类 Java方法的结果;(c)如果查找到对应的工具类Java方法,则根据该工具类Java方法的参数类型要 求,对所述的参数信息进行类型强制转换,并返回上述步骤(5);(d)如果无法查找到对应的工具类Java方法,则结束。在实际应用当中,本发明主要对EL表达式规则增加一个补充方法直接调用。方法的直接调用需要有下面两个特性(只针对Java)支持实例的直接方法调用,并且支持嵌套比如${ “abc”· IengthO };嵌套情况${“abc”· substring ( “abc” · length () _2)}。支持工具类的直接方法调用,并且支持嵌套比如$ {class com. primton. common. Util. test ( ‘abc,)}。基本方案如下1、基于 apache_commons_el_l· 0实例的直接方法调用实现的技术方案(1) ±曾力口一种 org. apache, commons, el. PropertySuffix 的实现 FunctionSuffix ;(2)在 org. apache, commons, el. parser. ELParser 角军析 PropertySuffix 时,JHi)口 FunctionSuffix的解析实现;(3)使用FunctionSuffix计算方法的值。方法,根据参数尽全力匹配,方法找到后,会根据方法的参数类型,强制转换参数 后执行方法;如果找不到方法,则会返回null。方法匹配约束如果方法名称相同,并且参数个数一致,参数类型大致相仿,则会 随机选择一个方法执行;如果还是无法找到,则会随机取一个名称相同,参数个数相同的方法。参数类型大致相仿是指
· byte (Byte)、short (Short)、int (Integer)、long (Long)、float (Float)、 double (Double)、BigInteger, BigDecimal,统一认为是数字类型,为相同类型;· char (Character)、String,为t匿同;
· boolean、Boolean,互为相符合的参数类型; 子类、父类,互为相符合的参数类型。工具类的直接方法调用实现的技术方案(1)在 org. apache, commons, el. parser. ELParser 角军析 FunctionInvocation 时, 增加class:XX. XXX的解析实现(2)修改 org. apache, commons, el. FunctionInvocation 的 evaluate 方法实现,足艮 FunctionSuffix的实现和规则一样。下面是一段使用的伪代码DefaultVariableResolverlmpl resover = new DefaultVariableResolverlmpl ();resover. put (" abc",“ 12345");TestBean bean = new TestBean ();resover. put {“ bean“ , bean);Variab IeRe so IverChain· get Instance (). addVariab IeRe so Iver (100, resover);ELUtil. evaluate (〃 $ {bean. setCount (5)} " ) ;//设定值System, out. printIn (ELUtil. evaluate ( " $ {abc. substring (1,bean, count)}"));//结果是2345ELUtil. evaluate (〃 $ {class: com. primeton. test. TestBean. test ()} 〃 );采用了上述的计算机软件系统中基于EL表达式实现Java方法直接调用的方法, 由于其中通过对后缀属性预定义信息中加入函数后缀定义实现信息,并在系统的EL表达 式解析器进行后缀属性预定义信息解析操作中增加函数后缀定义的解析实现信息,从而使 得用户不仅可以直接方便的使用EL表达式对数据进行运算,而且可以直接调用Java方法, 不仅可以使用在EOS的图形化编程的图元以及richweb的标签中,而且实现了支持EL表达 式的Java方法直接调用,有效解决了 EL表达式中变量值取值不灵活的问题,同时实现过程 简单方便,工作性能稳定可靠,适用范围较为广泛。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出 各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的 而非限制性的。
权利要求
一种计算机软件系统中基于EL表达式实现Java方法直接调用的方法,其特征在于,所述的方法包括以下步骤(1)在系统的后缀属性预定义信息中加入函数后缀定义实现信息;(2)在系统的EL表达式解析器进行后缀属性预定义信息解析操作中,增加函数后缀定义的解析实现信息;(3)系统根据EL表达式中的Java方法调用信息查找到对应的Java方法,并调用执行该Java方法。
2.根据权利要求1所述的计算机软件系统中基于EL表达式实现Java方法直 接调用的方法,其特征在于,所述的后缀属性预定义信息为org. apache, commons, el. PropertySuffix 中的信息。
3.根据权利要求1所述的计算机软件系统中基于EL表达式实现Java方法直接调用的 方法,其特征在于,所述的EL表达式角军析器为org. apache, commons, el. parser. ELParser 解析器。
4.根据权利要求1所述的计算机软件系统中基于EL表达式实现Java方法直接调用 的方法,其特征在于,所述的系统根据EL表达式中的Java方法调用信息查找到对应的Java 方法,包括以下步骤(11)系统提取EL表达式中的Java方法调用信息中的方法名称信息和参数信息;(12)系统根据所述的方法名称信息和参数信息进行对应的Java方法匹配查找处理;(13)如果查找到对应的Java方法,则根据该Java方法的参数类型要求,对所述的参数 信息进行类型强制转换,并返回上述步骤(3);(14)如果无法查找到对应的Java方法,则结束。
5.根据权利要求4所述的计算机软件系统中基于EL表达式实现Java方法直接调用的 方法,其特征在于,所述的根据方法名称信息和参数信息进行对应的Java方法匹配查找处 理,包括以下步骤(121)系统判断与所述的方法名称信息相同的Java方法是否存在;(122)如果存在,则判断相应的Java方法所要求的参数个数是否与所述的参数信息相 一致,且判断参数类型是否相符合;否则返回无法查找到对应的Java方法的结果;(123)如果有满足以上条件的Java方法,则判断该满足以上条件的Java方法是否有 多个;如果有多个,则从中随机选择一个Java方法,并返回查找到对应的Java方法的结果; 否则选择该Java方法,并返回查找到对应的Java方法的结果;(124)如果没有满足以上条件的Java方法,则从方法名称相同且参数个数相同的Java 方法中随机选择一个Java方法,并返回查找到对应的Java方法的结果。
6.根据权利要求5所述的计算机软件系统中基于EL表达式实现Java方法直接调用的 方法,其特征在于,所述的参数类型相符合的条件为(1)byte>Byte>short>Short> int>Integer>long、Long、float、Float、double、Double、 BigInteger、BigDecimal,互为相符合的参数类型;(2)char、Character、String,互为相符合的参数类型;(3)boolean. Boolean,互为相符合的参数类型;(4)子类、父类,互为相符合的参数类型。
7.根据权利要求1至6中任一项所述的计算机软件系统中基于EL表达式实现Java方 法直接调用的方法,其特征在于,所述的方法中还包括以下步骤(4)在系统的EL表达式解析器进行函数调用信息解析操作中,增加工具类函数后缀定 义的解析实现信息;(5)系统根据EL表达式中的工具类Java方法调用信息查找到对应的工具类Java方 法,并调用执行该工具类Java方法。
8.根据权利要求7所述的计算机软件系统中基于EL表达式实现Java方法直接调用的 方法,其特征在于,所述的函数调用信息为org. apache, commons, el. FunctionInvocation 中的信息。
9.根据权利要求7所述的计算机软件系统中基于EL表达式实现Java方法直接调用的 方法,其特征在于,所述的系统根据EL表达式中的工具类Java方法调用信息查找到对应的 工具类Java方法,包括以下步骤(21)系统提取EL表达式中的工具类Java方法调用信息中的方法名称信息和参数信息;(22)系统根据所述的方法名称信息和参数信息进行对应的工具类Java方法匹配查找 处理;(23)如果查找到对应的工具类Java方法,则根据该工具类Java方法的参数类型要求, 对所述的参数信息进行类型强制转换,并返回上述步骤(5);(24)如果无法查找到对应的工具类Java方法,则结束。
10.根据权利要求9所述的计算机软件系统中基于EL表达式实现Java方法直接调用 的方法,其特征在于,所述的根据方法名称信息和参数信息进行对应的工具类Java方法匹 配查找处理,包括以下步骤(221)系统判断与所述的方法名称信息相同的工具类Java方法是否存在;(222)如果存在,则判断相应的工具类Java方法所要求的参数个数是否与所述的参数 信息相一致,且判断参数类型是否相符合;否则返回无法查找到对应的工具类Java方法的 结果;(223)如果有满足以上条件的工具类Java方法,则判断该满足以上条件的工具类Java 方法是否有多个;如果有多个,则从中随机选择一个工具类Java方法,并返回查找到对 应的工具类Java方法的结果;否则选择该工具类Java方法,并返回查找到对应的工具类 Java方法的结果;(224)如果没有满足以上条件的工具类Java方法,则从方法名称相同且参数个数相同 的工具类Java方法中随机选择一个工具类Java方法,并返回查找到对应的工具类Java方 法的结果。
11.根据权利要求10所述的计算机软件系统中基于EL表达式实现Java方法直接调用 的方法,其特征在于,所述的参数类型相符合的条件为(1)byte>Byte>short>Short> int>Integer>long、Long、fIoat>Float>double>Double> BigInteger、BigDecimal,互为相符合的参数类型;(2)char、Character、String,互为相符合的参数类型;(3)boolean. Boolean,互为相符合的参数类型;(4)子类、父类,互为相符合的参数类型.
全文摘要
本发明涉及一种计算机软件系统中基于EL表达式实现Java方法直接调用的方法,其中包括在系统的后缀属性预定义信息中加入函数后缀定义实现信息、在系统的EL表达式解析器进行后缀属性预定义信息解析操作中增加函数后缀定义的解析实现信息、根据EL表达式中的Java方法调用信息查找到对应的Java方法并调用执行该Java方法。采用该种计算机软件系统中基于EL表达式实现Java方法直接调用的方法,可以方便的使用EL表达式直接调用Java方法,可以使用在EOS的图形化编程的图元以及richweb的标签中,实现了支持EL表达式的Java方法直接调用,有效解决了EL表达式中变量值取值不灵活的问题,同时实现过程简单方便,工作性能稳定可靠,适用范围较为广泛。
文档编号G06F9/46GK101840350SQ20101015168
公开日2010年9月22日 申请日期2010年4月20日 优先权日2010年4月20日
发明者武玉厚 申请人:上海普元信息技术有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1