Taglib в Java: тег с параметром массива - PullRequest
4 голосов
/ 08 октября 2010

Как я могу определить тег, который получает массив в качестве параметра?

Спасибо

Ответы [ 2 ]

4 голосов
/ 08 октября 2010

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>
    ...
3 голосов
/ 08 октября 2010

Если данные массива - Strings, вы можете передать значения в виде списка с разделителями, возможно, в атрибуте.

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

Вы можете сделать то же самое с телом тега, или jsp:param, или чем-то подобным, но я подозреваю, что подход с использованием атрибутов, вероятно, проще всего кодировать и понимать.

...