我想ArrayList<HashMap<String,String>>
用三个字符串参数返回 EL 函数。怎么做?
问问题
4877 次
2 回答
6
您也可以在您的 tld 中使用复杂的返回类型。例如,这将起作用:
public static List<Map<String, String>> func(String arg1, String arg2,
String arg3) {
List<Map<String, String>> out = new ArrayList<HashMap<String, String>>();
// code code code
return out;
}
在您的 .tld 文件中,您必须输入以下内容:
<function>
<description>Blah blah blah</description>
<name>func</name>
<function-class>your.package.YourClassName</function-class>
<function-signature>
java.util.List<java.util.Map<java.lang.String,java.lang.String>> func(java.lang.String,java.lang.String,java.lang.String)
</function-signature>
</function>
注意事项:如本例所示,尖括号必须在 XML 中正确转义。函数签名不能换行。非一元泛型,例如Map<String,String>
,不能用作参数。(可能是标记化错误。)您将不得不使用原始类型。
于 2013-12-06T08:24:29.510 回答
3
实际上,我认为让 EL 函数返回一些复杂对象是完全合理的。当然,有一些“架构风格”的问题可能会决定什么情况下适合和不适合这样的事情,但我想说一个很好的例子是返回一些不适合的配置信息的工具。特定于任何特定操作,对后端业务逻辑并不真正感兴趣,并且可能用于在许多页面上进行演示。
为此,您需要一个返回“Object”或“Object[]”的 EL 函数。您不能在 EL 声明中(即在 .tld 文件中)使用 Java 泛型的东西,但这并不重要,因为 EL 环境无论如何都会进行类型嗅探。你要做的是在某处的类中声明一个公共静态函数:
public static Object yourFunction(String arg1, String arg2, String arg3) {
// code code code
return (ArrayList<HashMap<String, String>>) whatever;
}
在您的 .tld 文件中,您将拥有如下内容:
<function>
<description>Blah blah blah</description>
<name>yourFunction</name>
<function-class>your.package.YourClassName</function-class>
<function-signature>
java.lang.Object yourFunction(java.lang.String, java.lang.String, java.lang.String)
</function-signature>
</function>
在您的 JSP 中,您可以像这样访问该函数:
<c:set var='result' value='${prefix:yourFunction("Goodbye", "Mr.", "Chips")}'/>
于 2010-02-21T16:18:08.493 回答