Smat
Smat

Reputation: 17

eclipse is showing error on render() in play2

i am new on Play Framework and i am trying to develop sample java application

i have created new html page test.html

in controllers it is working if we simply return result in the form of string i.e. return ok("hello world") but it simply format all the styling/text and just shows "hello world" on the UI.

 public static Result test() {
        return ok("hello world");
        }

// working fine

but it gives errors when i try this

public static Result test(){
        return ok(test.render());
        }

// giving error

it gives following errors

[error] /opt/ahsen/play-2.2.3/testapp/app/controllers/Application.java:15: render(java.lang.String,play.api.templates.Html) in views.html.test cannot be applied to ()

[error] return ok(test.render());

[error] (compile:compile) javac returned nonzero exit code

here is my test.html file

    @(title: String)(content: Html)

    <!DOCTYPE html>

    <html>
    <head>
    <title>@title</title>
    <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
    <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
    <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"> 
    </script>
    </head>
    <body>
        @content
    </body>
</html>

help please

Upvotes: 1

Views: 134

Answers (1)

Daniel Olszewski
Daniel Olszewski

Reputation: 14401

Your test.html template requires two parameters

@(title: String)(content: Html)

So you need to pass them to the template in your controller

public static Result test(){ 
  String title = "test title";
  Html content = // create content
  return ok(test.render(title, content));
}

Better solution

Test.html looks rather as a more general layout template. I would create a separate file for generating content instead passing it directly from a controller.

content.html

@(title: String)

@test(title){
  <span>this is the content</span>
}

And in the controller it would look like this.

public static Result test(){ 
  String title = "test title";
  return ok(content.render(title));
}

Upvotes: 2

Related Questions