play framework 2.1.3 расширить play.api.templates.html

Просто интересно, возможно ли это, и если да, то насколько сложно расширить класс play.api.templates.Html.

import java.lang.StringBuilder;

public class MyHtml extends play.api.templates.Html {

}

дает мне ошибку:

error: constructor Html in class Html cannot be applied to given types;

это дает то же самое:

public class MyHtml extends play.api.templates.Html {
    String text;

    public MyHtml(String text) {
        this.text = text;
    }
}

Спасибо


person Trevor Donahue    schedule 20.10.2013    source источник


Ответы (1)


play.api.templates.Html написано в Scala, а не в Java, поэтому используется не java.lang.StringBuilder, а scala.collection.mutable.StringBuilder.

Это компилируется (я не говорю, что это полезно или даже хорошая практика):

package views;

public class MyHtml extends play.api.templates.Html {
    private String text;

    public MyHtml(String text) {//please take care of HTML injection!!!
        super(scala.collection.mutable.StringBuilder$.MODULE$.newBuilder());
        this.text = text;
    }

    @Override
    public String body() {
        return text;
    }
}
person Schleichardt    schedule 20.10.2013
comment
спасибо, компилируется. Но причина, по которой я хотел это сделать, заключается в вызове MyHtml из контроллера следующим образом: views.MyHtml.user.read.render( ... это выполнимо? - person Trevor Donahue; 21.10.2013
comment
Настоящие шаблоны Scala предоставляют метод «рендеринг» для API Java для создания экземпляра HTML. MyHtml уже имеет тип «Html», поэтому вы должны использовать его как «return ok (new views.MyHtml (foo));». Не рекомендуется терять шаблоны Scala, они типобезопасны и защищают вас во многих случаях, связанных с проблемами безопасности. - person Schleichardt; 21.10.2013
comment
return ok(new views.MyHtml("foo")); Это не работает. страница пуста. - person Trevor Donahue; 21.10.2013
comment
Я также обновил свой ответ, когда написал свой комментарий. Я переопределяю метод body(), - person Schleichardt; 21.10.2013