[英]ArrayList return type in generic interface - <identifier> expected
[英]el function with generic arraylist return type and with parameter
我想在EL函数中返回带有三个String参数的ArrayList<HashMap<String,String>>
。 怎么做?
您也可以在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>
,不能用作参数 。 (可能是一个标记化错误。)你必须在那里使用原始类型。
实际上我认为让EL函数返回一些复杂的对象是完全合理的。 当然,有一些“架构风格”的问题可能决定了这种事情的适当和不适合的情况,但我会说一个很好的例子就是返回某种配置信息的一些设施。特定于任何特定操作,对后端业务逻辑不感兴趣,并且可能在许多页面上用于演示目的。
要做到这一点,你想要的是一个EL函数,它返回“对象”,或者可能是“对象[]”。 您不能在EL声明中使用Java泛型内容(在.tld文件中),但这并不重要,因为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")}'/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.