playframework1‎ > ‎template‎ > ‎

includeタグで対象ファイルが存在しない場合への対処

Url Redirector Modified

includeタグを使うと外部ファイルをインクルードすることができます。
通常はファイルが存在することを前提にすると思いますが、たとえば変数を使って動的に読み込みファイル名を決めたり、あるいはWARファイル作成時にsubversionのリビジョン情報の書かれたファイルを同梱する、といったことも無いとは言えません。
 
対処と言っても難しいことはなく、ファイルが存在しない場合はTemplateNotFoundException例外が発生しますので、
下記のように、try~catch で挟んで例外を捕捉するだけでよいです。

%{ try { %}
  #{include 'adm/'+type.name+'/list.custom.html' /}
%{ } catch (play.exceptions.TemplateNotFoundException e) { }%
  ファイル読み込みできませんでした.
%{ } }%



カスタムタグ

安全なインクルードを行うカスタムタグを作ってみました。エラーにならず代替文字を表示します。
safeInclude.html
%{
  try {
    (_arg ) && (_src = _arg);
    if (!_src) {
        throw new play.exceptions.TagInternalException("src attribute cannot be empty for safeInclude tag");
    }
%}
#{include _src /}
%{
  } catch (play.exceptions.TemplateNotFoundException e) {
}%
  #{doBody/}
%{
  }
}%

使い方1

ファイルが見つからないときは何にも置換されず、スルーします。
#{saleInclude 'myfile.txt' /}

使い方2

ファイルが見つからないときは指定したエラーメッセージに置換します。
#{saleInclude 'myfile.txt' }ファイルが見つかりません#{/saleInclude}




ċ
ly copins,
2015/07/24 23:40