計算機軟體系統基於EL表達式實現Java方法直接調用的方法
2023-05-30 07:53:56
專利名稱:計算機軟體系統基於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日
發明者武玉厚 申請人:上海普元信息技術有限責任公司