3
2
1

ユーザーマクロを使用して、$contentより取得できる文字列項目の部分文字列を表示しようとしているのですが、標準のvelocityテンプレートで使用できるsubstring関数がconflueneでは使えずエラーとなってしまいます。
substring関数を使用できるようにする方法、若しくは、代替となる方法はあるでしょうか。

    Commentコメントを追加...

    3 回答

    1.  
      1
      0
      -1

      文書のコメントの最終更新日を、下記のように文字列として取得して変数に入れます。

                  #set($wkDate = "$comment.getLastModificationDate()")

      この場合、日時がミリ秒の桁まで表示され、ちょっと仰々しいので、分までの表示にしたいと考え、

                  #set($wkDate = "$comment.getLastModificationDate()".substring(0, 16))

      のように修正したところ下記のエラーになってしまいました。


         マクロ「view_all_inlinecomment」レンダリング中にエラーが発生しました

         Error occurred rendering template content

      何か間違っていますでしょうか。



      1. tatsumi

        ありがとうございます。
        お教えいただいた方法で日付・時分のみ出力できました。
        以前dateFormatterを教えていただいたのですが、$action からインスタンス生成が
        必要だということを分かっておりませんでした。

        ちなみに、前の返信でsubstringを使用できると思ったのは、
        $comment.getLastModificationDate()をダブルクォートで囲めばStringクラスになると
        思ったからです。

      2. Shuzaburo Doba

        dateFormatter につきまして、
        当初、私もそのまま使用できると思っていました。

        https://developer.atlassian.com/server/confluence/confluence-objects-accessible-from-velocity/

        (こちらのページに書いてあったので...)

        実際に試してみたところ $dateFormatter には何もオブジェクトが格納されていないようだったので、
        $action から改めて取得するようにしたところうまくいきました。

        申し訳ありませんでした。

        期待する表示ができたようでまずは安堵いたしました.

        お試しいただきありがとうございました!..

      Commentコメントを追加...
    2.  
      3
      2
      1

      getLastModificationDate() で返されるクラスは java.sql.Timestamp だったようなので、
      substring() は使用できないかと思います。

      そのまま dateFormatter から任意の形式で出力するのがいいかと考えました。

      #set ($dateFormatter = $action.dateFormatter)
      #set($wkDate = $comment.getLastModificationDate())
      
      $dateFormatter.formatGivenString("yyyy/MM/dd HH:mm", $wkDate)

      いかがでしょうか...?

        Commentコメントを追加...
      1.  
        1
        0
        -1

        substring を使用したいオブジェクトが String であれば substring は使用できると思いますが、
        どのような操作を行いたいのでしょうか?

          Commentコメントを追加...