配列をパラメーターとして受け取るタグを定義するにはどうすればよいですか?
ありがとう
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>
...
配列データが文字列の場合、値を区切りリストとして、おそらく属性で渡すことができます。
<mytag myattribute="value1,value2,value3"/>
タグ本体や ajsp:param
などで同じことを行うこともできますが、おそらく属性アプローチがコーディングと理解が最も簡単であると思います。