2013-10-20 29 views
1

只是想知道是否有可能,如果是的話,擴展play.api.templates.Html類是多麼的困難。播放框架2.1.3擴展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; 
    } 
} 

謝謝

回答

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; 
    } 
} 
+0

謝謝你,它編譯。但我想這樣做的原因是從控制器調用MyHtml: 'views.MyHtml.user.read.render(...'是可行的嗎? –

+1

真正的Scala模板提供了'render'對於Java API來生成一個HTML實例,MyHtml已經是'Html'類型了,所以你可以像使用'return ok(new views.MyHtml(「foo」));'。這不是一個好主意失去Scala模板,它們是類型安全的,並且在安全問題中保護你很多。 – Schleichardt

+0

'return ok(new views.MyHtml(「foo」));'This does not work。the page is blank。 –