3

当社では、チームのドキュメント サイトとしてConfluence wiki の使用を開始し、 PocketQueryというマクロを実装しています。

このマクロは、SQL データをサイトに動的に取り込みます (サイトの連絡先などの情報を取り込みます)。

Velocity Templatesを使用してデータを表示しますが、単純な配列のインデックス付けを行うときに問題が発生します。

コード:

#set ( $page = $additionalParams.get('Page') )
#set ( $pages = "" )
#if ( $page != $null && $page != "" )
    #set ( $pages = $page.split(";") )
#else
    #set ( $pages = [] )
#end

$additionalParams、テンプレートの外部で初期化されたリストであり、マクロに渡されるパラメーターが含まれています。この場合:

ページ=サイト名;サーバー

私が設定しようとしているコードはName;Server$additionalParamsリストから値を取得し、値が空でない場合は値を分割してから、最初の値を取得しています。

私が試してみました:

$pages.get(1)
$pages[1]

ただし、値は取得されません(インデックスとしてゼロも試しました-同じ結果です)。

この配列を foreach し、各エントリを出力することは機能します。つまり、そこ値があることを意味します。

私ができるようにしたいのは、配列にインデックスを付けることだけです-とにかくこれを行うことを掘り下げることはできません。

$pages.getメソッドを使用してインデックスを作成できるように、これをリストに変換できますか?

それを拡張すると、$pages.containsメソッドを使用できるようになりますか?

Confluence は Velocity 1.6 を使用しています。

編集:

このページこのページの解決策は機能しません - テンプレートがそれらを使用するための適切なオブジェクトがコンテキストにないのではないかと (乱暴に) 推測していますか?

(PocketQuery または Confluence がこれを行うでしょうか?)

「ListTool」を使用するにはどうすればよいですか?

4

2 に答える 2

2

これをあらゆる種類のエレガンスで機能させる唯一の方法は次のとおりです。

#set ( $Page = $additionalParams.get('Page') )
#set ( $Pages = [] )
#if ( $Page != $null && $Page != "" )
    #foreach($i in $Page.split(";"))
        $Pages.add($i)
    #end
#end

これは別の配列を初期化し、分割された値をループして別の配列に追加します。これは、この質問で提供されているメソッドを使用できるようです

その後、次のように使用できます。

$Pages.get(0)//Would return "Site Name"

また、

$Pages.contains("Site Name")//Would return true
于 2013-06-14T04:17:35.313 に答える
-2

mtbennet は実際に正しいです - 私がテストしたところ、動作します!!! 答えを見つけるのに約1か月かかり、彼のコードスニペットが機能しました

#set ( $Page = $additionalParams.get('Page') )
#set ( $Pages = [] )
#if ( $Page != $null && $Page != "" )
    #foreach($i in $Page.split(";"))
        $Pages.add($i)
    #end
#end
于 2014-12-10T13:17:46.447 に答える