重载在TLD中定义的EL函数

时间:2013-08-28 19:13:31

标签: jsp el

是否可以重载(函数名称)EL函数?请看下面的TLD:

相同的函数名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 个答案:

答案 0 :(得分:2)

不,遗憾的是EL函数不支持方法重载(也不支持varargs)。为每个函数指定一个不同的名称。

答案 1 :(得分:0)

您无法在TLD定义的函数中执行此操作,但您可以使用varags方法和/或重载方法将对象放在应用程序范围内(一次启动时),并使其正常工作。

您可以在servlet的init()方法中创建类的实例并将其放在应用程序(servlet)范围中,而不是在TLD中定义它,如下所示:

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

然后,您将${my:rollIt(6)}而不是${roller.rollIt(6)}。而不是${my:rollIt()},你会${roller.rollIt()}