1

#{a組み込みのテンプレートタグを拡張したいのですが。たとえば、毎回書く代わりに:

#{a @Controller.Action(parameter.slugify()) /}

その場合parameter="This Is a Test"、生成されるのhrefhttp://localhost/controller/action/this-is-a-test

パラメータを明示的に使用せずに、デフォルトで常にスラッグ化されるように拡張したいと思います.slugify()

ありがとう

4

1 に答える 1

3

あなたがしたいのはあなた自身の速いタグを定義することです。ここに良い例があります。この回答確認してください。

コードはおそらく次のようになります。

@FastTags.Namespace("mytags")
public class MyTags extends play.templates.FastTags{


    public static void _a(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
        ActionDefinition actionDef = (ActionDefinition) args.get("arg");
        if (actionDef == null) {
            actionDef = (ActionDefinition) args.get("action");
        }
        if (!("GET".equals(actionDef.method))) {
            if (!("POST".equals(actionDef.method))) {
                String separator = actionDef.url.indexOf('?') != -1 ? "&" : "?";
                actionDef.url += separator + "x-http-method-override=" + actionDef.method;
                actionDef.method = "POST";
            }
            String id = Codec.UUID();
            out.print("<form method=\"POST\" id=\"" + id + "\" " +(args.containsKey("target") ? "target=\"" + args.get("target") + "\"" : "")+ " style=\"display:none\" action=\"" + actionDef.url + "\">");
            _authenticityToken(args, body, out, template, fromLine);
            out.print("</form>");
            out.print("<a href=\"javascript:document.getElementById('" + id + "').submit();\" " + serialize(args, "href") + ">");
            out.print(JavaExtensions.toString(body));
            out.print("</a>");
        } else {
            out.print("<a href=\"" + actionDef.url + "\" " + JavaExtensions.slugify(serialize(args, "href")) + ">");
            out.print(JavaExtensions.toString(body));
            out.print("</a>");
        }
    }
}

テンプレートでは次のように呼び出されます。

#{mytags.a @Controller.Action(parameter) /}
于 2012-02-01T12:16:52.480 に答える