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