I am feeling to keep some portions(form’s select html) of play template separate so that I can call them in main template based on condition. But in those portions I need data which will be fetched from db. I don’t want to pass data form main template’s controller.
So I need to keep independent database query in those template portions.
Is there any way of doing this?
What comes to my mind is:
In Twirl (Play’s template engine) you can inject components like you can in regular Java classes:
https://www.playframework.com/documentation/2.7.x/JavaTemplates#Template-constructor
So I guess you can just inject the database and use it in the template:
@this(db: play.db.Database)
@(...template parameters...)
Now inside this template you can use the database:
@{db.getConnection()....}
Hope that helps!
Unfortunately suffering from Error
the template file is
fromSelectTag.scala.html
@this(db: services.dbServices.TeacherDAO)
@()
. . . .
when I call this on other template like this
@fromSelectTag()
Error generates –
not found: value fromSelectTag
You now also need to inject the fromSelectTag
into the template in which you use it:
@this(fromSelectTag: views.html.fromSelectTag)
@()
Now you can use it: @fromSelectTag()
This also means if you want to use that template in a controller you also have to inject that template into the controller as well now:
public class HomeController extends Controller {
private MyView myView;
@Inject
public HomeController(MyView myView) {
this.myView = myView;
}
public Result index() {
return ok(this.myView.render());
}
}
(I did not test this code, but I hope you get the idea)
Thanks a lot, this works!!