渲染Play框架2.0模板的一部分

时间:2012-06-22 09:30:30

标签: java playframework playframework-2.0

我正在尝试从控制器调用模板内的标签(函数)而不是模板。这样我可以使用它来从ajax调用中对页面进行部分渲染。当然,我可以在几个模板中分离表单的组件,然后调用它们,但我认为它会更清晰。

我想做的事情如下:

formpage.scala.htm

@()
<html>
...

@content

...
</html>


@**********************************
* Helper generating form *
***********************************@
@content() = {

<h3 class="form-heading">@Messages("employees")</h3>

@form(routes.AppController.save()) {    

@inputText...
...

}

使用ajax渲染内容函数,而不必将其分隔为 单独的文件。这样我就可以渲染模板的一部分而不会破坏它 在多个文件中。

1 个答案:

答案 0 :(得分:3)

事实上,标签只是一个较小的模板,所以你可以使用标签 - 在模板和控制器中使用最简单的样本:

/app/views/tags/mytag.scala.html

This is my tag...

在控制器中可以渲染为:

public static Result createFromTag(){
    return ok(views.html.tags.mytag.render());
}

在其他模板中,您只需插入:

....
And there is my tag rendered
<b>@tags.mytag()</b>

更灵活

当然,因为它是模板 ergo Scala函数,你可以将一些参数传递给它甚至是Html体:

/app/views/tags/othertag.scala.html

@(headline: String)(body: Html)

<h3>@headline</h3>
<div class="tagsBody">
    @body
</div>

在控制器中可以渲染为:

public static Result createFromTag(){

    return ok(
            views.html.tags.othertag.render(
                    "Head from controller",
                    new play.api.templates.Html("This code becomes from <i>controller</b>")
            )
    );
}

(当然,您可以将这两个代码导入更短的代码import play.api.templates.Html;import views.html.tags.othertag

最后,在您的模板中,您可以将标记用作:

And there is my tag rendered <br/>
@tags.othertag("Head from template"){
    some content for the tag's body from <b>The Template!</b>
}

最终

您可以在documentation中找到标签说明。