【问题标题】:play framework 2.1.3 extend play.api.templates.Htmlplay framework 2.1.3 扩展play.api.templates.Html
【发布时间】:2013-10-20 20:18:41
【问题描述】:

只是想知道这是否可行,如果可以,扩展 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;
    }
}

谢谢

【问题讨论】:

    标签: java playframework playframework-2.1


    【解决方案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;
        }
    }
    

    【讨论】:

    • 谢谢,它可以编译。但我想这样做的原因是像这样从控制器调用 MyHtml:views.MyHtml.user.read.render( ... 可行吗?
    • 真正的 Scala 模板为 Java API 提供了“render”方法来生成 HTML 实例。 MyHtml 已经是 'Html' 类型,所以你可以像 'return ok(new views.MyHtml("foo"));' 一样使用它。丢失 Scala 模板不是一个好主意,它们是类型安全的,可以在很多安全问题的情况下保护您。
    • return ok(new views.MyHtml("foo")); 这不起作用。页面是空白的。
    • 我在写评论时也更新了我的答案。我重写了方法 body(),
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多