代码之家  ›  专栏  ›  技术社区  ›  Victor

Java中的Taglib:带数组参数的标记

  •  4
  • Victor  · 技术社区  · 14 年前

    如何定义接收数组作为参数的标记?

    谢谢

    2 回复  |  直到 14 年前
        1
  •  4
  •   Peter DeWeese    14 年前

    JSTL做到了,你也可以做到。

    我碰巧手头有一个el函数示例,然后我将粘贴c:forEach定义的一部分,让您了解:

    可以将其作为分隔字符串传递,但如果需要集合或数组,则可以使用以下内容:

    <function>
      <name>join</name>
      <function-class>mypackage.Functions</function-class>
      <function-signature>String join(java.lang.Object, java.lang.String)</function-signature>
    </function>
    

    /**
     * jstl's fn:join only works with String[].  This one is more general.
     * 
     * usage: ${nc:join(values, ", ")}
     */
    public static String join(Object values, String seperator)
    {
        if (values == null)
            return null;
        if (values instanceof Collection<?>)
            return StringUtils.join((Collection<?>) values, seperator);
        else if (values instanceof Object[])
            return StringUtils.join((Object[]) values, seperator);
        else
            return values.toString();
    }
    

    显然,不是 Object 如果不想处理集合,也可以使用数组。

    以下是c:forEach的定义:

    <tag>
        <description>
            The basic iteration tag, accepting many different
            collection types and supporting subsetting and other
            functionality
        </description>
        <name>forEach</name>
        <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
        <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
        <body-content>JSP</body-content>
        <attribute>
            <description>
                Collection of items to iterate over.
            </description>
            <name>items</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.Object</type>
        </attribute>
        ...
    
        2
  •  3
  •   brabster    14 年前

    如果数组数据是字符串,则可以将值作为分隔列表(可能在属性中)传递。

    <mytag myattribute="value1,value2,value3"/>
    

    你也可以用标签体,或者 jsp:param 或者是这样,但是我怀疑属性方法可能是最容易编码和理解的。