0

separatorタグ内listでアイテム間にセパレーターを追加できるタグタグを定義したいと思います。

サンプルコードは次のとおりです。

List<String> users = new ArrayList<String>();
users.add("Jeff");
users.add("Mike");

#{list users, as: 'user'}
    #{separator ' + ' /}
    <span>${user}</span>
#{/list}

separatorタグを使用しない場合、コードは次のようになります。

#{list users, as: 'user'}
    ${user_isFirst ? '' : ' + '}
    <span>${user}</span>
#{/list}

生成される html コードは次のようになります。

<span>Jeff</span> + <span>Mike</span>

を定義してみましたfastTag

public static void _separator(Map<?, ?> args, Closure body, PrintWriter out, GroovyTemplate.ExecutableTemplate template, int fromLine) {
    Object value = args.get("arg");

    // TODO how to get the value of `as` defined in parent `list` tag?

    out.print(value);
}

しかし、問題は、この場合、タグでas定義された値 (これは ) を取得できないことです。listuser

4

2 に答える 2

2

このようにgroovyでカスタムリストタグを作成できます

#{list items:_arg, as:'tmp'}

    %{
            attrs = [:]
            attrs.put(_as, tmp)
    }%

    #{ifnot tmp_isFirst}${_sep}#{/ifnot}
    #{doBody vars:attrs /}

#{/list}

このように使用します

#{myList users, as:'user', sep:','}
    ${user}
#{/myList}
于 2013-01-24T07:12:30.997 に答える
0

FastTag の実装をトレースする必要があります。args マップ内のスコープ内のすべての変数が表示されると思います。これは記憶によるものです。そうでない場合は申し訳ありません。

とは言っても、#{list} の Java コードをコピーして、次のように新しいパラメーターを追加すると、より簡単になると思います。

#{list users, as: 'user', separator: '+' }

そこでロジックを処理します。設計の観点からも少しきれいに見えます-セパレーターの場合、コード内の好きな場所に配置できるのはなぜですか(そして、2回配置しないのはなぜですか!)。

最後の選択肢は、Groovy または Java のコレクション演算子を調べることです。http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html

于 2013-01-23T23:07:11.543 に答える