2013-08-28 34 views
4

是否有可能重載(函數名稱)EL函數?請看下面這段TLD的:重載在TLD中定義的EL函數

的功能相同名稱rollDice

<function> 
<name>rollIt</name> 
<function-class>com.Person</function-class> 
<function-signature>int rollDice()</function-signature> 
</function> 

<function> 
<name>rollIt</name> 
<function-class>com.Person</function-class> 
<function-signature>int rollDice(int)</function-signature> 
</function> 

回答

2

不,EL功能都遺憾的是不支持方法重載(也沒有可變參數)。給每個函數一個不同的名字。

+0

EL功能支持可變參數和陣列 \t \t functionname \t \t <函數級> com.test.SomeClass \t \t <函數簽名> java.lang.String中函數名(java.lang.Long ...) \t

0

你不能在TLD定義的函數中完成它,但是你可以用一個varags方法和/或重載的方法將一個對象放在應用程序作用域(一次,在啓動時),並且可以正常工作。

而是在TLD定義它,你可以在你的servlet的init()方法,您創建類的實例,並將其放置在應用程序(servlet的)範圍,就像這樣:

MyDiceRoller roller = new MyDiceRoller(); 
ServletContext context = getServletContext(); 
context.setAttribute("roller", roller); 

然後,而不是${my:rollIt(6)},你會做${roller.rollIt(6)}。而不是${my:rollIt()},你會做${roller.rollIt()}