【问题标题】:Taglib in Java: tag with array parameterJava中的Taglib:带有数组参数的标签
【发布时间】:2011-04-22 14:54:44
【问题描述】:

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

谢谢

【问题讨论】:

    标签: java jsp jsp-tags taglib


    【解决方案1】:

    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】:

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

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

    您可以对标签正文或jsp:param 或类似的东西做同样的事情,但我怀疑属性方法可能最容易编码和理解。

    【讨论】:

    • 想不出别的办法。标签应该在 JSP 页面中以声明方式使用,因此您所拥有的只是 XML,即字符串、标签、属性,除非您打算使用 scriptlet,这不是一个好的做法。你能详细说明你想要做什么吗?
    猜你喜欢
    • 2020-01-19
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多