繁体   English   中英

具有泛型arraylist返回类型和参数的el函数

[英]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&lt;java.util.Map&lt;java.lang.String,java.lang.String&gt;&gt; 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM