インターン三日目

アプリコースのインターン三日目の今日は基礎編2の続きから始めて、最後まで終わりました。Testの詳細画面でURLのドメインとサムネイル画像を表示させて、一覧画面にはURLをリンク付きで表示できるようになりました。


  • ドメイン

/test-portlet/war/src/main/webapp/WEB-INF/templates/vm/GlobalMacros.vmでvelocimacroの定義をしていることを知ったので、新しいvelocimacroを定義してしまいました。

Velocimacro(VMとも呼ばれる)とはVelocityで定義できるマクロのことで、 マクロとは特定の操作手順をプログラムとして記述して自動化することです。 よく使う処理をマクロとして保存しておけば、 マクロを呼び出すことで簡単にその処理を行えるようになります。 (http://www.techscore.com/tech/Java/ApacheJakarta/Velocity/6/)

具体的には以下のようにtdタグと一緒に定義しました。

#macro(ALtdlinkitem $text)
        <td><a href="$text">$text</a></td>
    </tr>
#end

また、URLからドメインを取得できるメソッドをTestResultData.javaで以下のように定義しました。

  public String extractDomain(ALStringField u){
      String domain = "";
      String url = u.getValue();
      int len = url.length();
      int end = 0;
      int slashCount = 0;
      for(int i = 0; i<len; i++){
          if(url.charAt(i)=='/'){
              slashCount++;
              if(slashCount == 3){
                  end = i;
                  break;
              }
          }
      }
      domain = url.substring(0, end);
      return domain;
  }

(ドメインの抽出は、JavaのURIクラスを使えば2,3行で書けるらしいことを後で知りました・・・。)

これらを用いて、ajax-test-detail.vmに

#ALtdcaption("")
#ALtdlinkitem($!result.Detail.extractDomain($!result.Detail.Url))

と記述しました。


  • サムネイル画像

はじめは、これもドメインと同様、GlobalMacros.vmでサムネイルを表示するhtmlタグを定義しようと思ったのですが、なぜか上手くいきませんでした。 ググっても原因がわからなかったので諦めて、過去のインターン生のHackを参考にしました。 まずAipoLocalization_ja.propertiesに

TODO_THUMBNAIL=サムネイル

を追加して、 ajax-test-detail.vmに

#ALtdcaption($l10n.TODO_THUMBNAIL)
    <td><a href="$!result.Detail.Url"><img title="thumbnail_of_$!result.Detail.Url" src="http://capture.heartrails.com/free?$!result.Detail.Url" alt="$!result.Detail.Url" width="200" height="300"></a></td>
</tr>

をnoteの下にくるように追加して終わりです。


  • 一覧にURLを追加

すんなりできるかと思ったら苦戦しました。社員の方にご丁寧に教えていただき、なんとかできました。 ありがとうございました。 ajax-test.vmに

#ALtdcellheaderAtt('class="auiMTCaption"')
<div>
<a href="$!record.Url">$!record.Url</a>
</div>
#ALtdcellfooter()

を追加し、

TestSelectData.javaに

rd.setUrl(ALCommonUtils.compressString(
           record.getUrl(),
           getStrLength()));

を追加したらできました。 やっと基礎編が終わったので、次から実践編に移りたいと思います。 よろしくお願いします。