トリックは、フレームワークに JavaScript、CSS、または静的ディレクトリ内のその他のものを解析させることです。これが簡単な解決策です。
controllers.StaticParser
コントローラーを追加します。
package controllers;
import play.mvc.Controller;
public class StaticParser extends Controller {
public static void parse(String route) {
render("/" + route);
}
}
conf/routes
ファイルに次を追加します。
GET /parse/{<.*>route} StaticParser.parse
そのルートの正規表現は非常に重要です。そうしないと、リクエストにパスを追加できません。js スクリプトなどの解析済み静的リソースをリクエストするには、次を使用します。
<script src="/parse/public/javascripts/test.js"
language="javascript" type="text/javascript" ></script>
#{script 'test.js' /}
残念ながら、スクリプト タグは静的ファイルを検索するため、この形式は使用できません。その煩わしさを正すために、スクリプト タグの恥知らずなハックがあります:#{parsescript 'test.js'/}
タグです。次の場所に移動する必要があります/views/tags/parsescript.tag
。
{
* insert a parsescript tag in the template.
* by convention, referred script must be put under /public/javascripts
* src (required) : script filename, without the leading path "/public/javascripts"
* id (opt.) : sets script id attribute
* charset (opt.) : sets source encoding - defaults to current response encoding
*
* #{parsescript id:'datepicker' , src:'ui/ui.datepicker.js', charset:'${_response_encoding}' /}
}*
%{
(_arg ) && (_src = _arg);
if (!_src) {
throw new play.exceptions.TagInternalException("src attribute cannot be empty for script tag");
}
_src = "/public/javascripts/" + _src
try {
_abs = play.mvc.Router.reverseWithCheck(_src, play.Play.getVirtualFile(_src), false);
} catch (Exception ex) {
throw new play.exceptions.TagInternalException("File not found: " + _src);
}
}%
<script type="text/javascript" language="javascript"#{if _id} id="${_id}"#{/if}#{if _charset} charset="${_charset}"#{/if} src="/parse${_abs}"></script>
タグとまったく同じように機能#{script /}
しますが、ファイルを返す前に解析します。#{parsescript 'test.js' /}
タグを恥知らずにハッキングすることもでき#{stylesheet /}
ますが、すでに十分なスペースを占めていると思います。