1

ArrayListカスタム Beanがあります。のメソッドを呼び出してから、それに含まれるオブジェクトをオーバーライドすることで、 jstljoin関数を使用したいと思います。ArrayListtoArrayArrayListtoString

クラスを拡張して、JSP に公開したいメソッド/プロパティの「get」を含めることを妨げるものは何もないと言われています。

したがって、この例では次のようになります。

class MyArrayList extends ArrayList
{
  public Object[] getToArray()
  {
     return this.toArray();
  }
}

良いアイデア?

私は再利用性を念頭に置いてこのようなクラスを作成してきました. JSPで?

もちろん、これは私が JSP に関するいくつかの基本的な概念を十分に把握していない別のケースかもしれませんが、JSP ページで「get」スタイルのメソッド名を持つ Bean 型クラスしか使用できないことは、純粋に不便だと思います。もしそうなら、なぜこのような図書館が悪い考えなのか教えてください。基本的に、私が説明したようなライブラリが存在しない場合、なぜでしょうか?

4

2 に答える 2

2

具体的な機能要件に関しては、またはjoin()をとるカスタムEL関数を作成できます。ListCollection

例えば

package com.example;

import java.util.Collection;

public final class Functions {

     private Functions() {}

     public static <E> String join(Collection<E> collection, String separator) {
         StringBuilder builder = new StringBuilder();

         for (E element : collection) {
             if (builder.length() > 0) {
                 builder.append(separator);
             }

             builder.append(element);
         }

         return builder.toString();
     }

}

/WEB-INF/functions.tld次のようにファイルに登録します。

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>Custom Functions</short-name>
    <uri>http://example.com/functions</uri>

    <function>
        <name>join</name>
        <function-class>com.example.Functions</function-class>
        <function-signature>java.lang.String join(java.util.Collection, java.lang.String)</function-signature>
    </function>
</taglib>

最終的には次のように使用できます

<%@taglib prefix="f" uri="http://example.com/functions" %>

${f:join(bean.list, ', ')}

または、Apache Commons Langがすでにクラスパスにある場合は、代わりにそれに委任してください。

    <function>
        <name>join</name>
        <function-class>org.apache.commons.lang.StringUtils</function-class>
        <function-signature>java.lang.String join(java.util.Collection, java.lang.String)</function-signature>
    </function>

最初の質問に関しては、既存のインターフェイスのカスタム実装にカスタムパブリックメソッドを追加せず、そのカスタム実装に依存したいと思います。

于 2012-05-05T23:00:28.917 に答える
1

EL 2.2 - 任意のメソッドを呼び出すことができます (Tomcat 7 以降で利用可能) - 必要なものが得られるはずです。たとえば、配列を返す ${someListObject.toArray()}

于 2012-05-06T07:55:11.817 に答える