5

是否可以重载(函数名称)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> 
4

2 回答 2

3

不,不幸的是,EL 函数不支持方法重载(也不支持可变参数)。给每个函数一个不同的名字。

于 2013-08-28T19:19:55.970 回答
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()}

于 2015-07-30T23:19:40.257 回答