我在将 FormFactory 注入我的控制器时遇到问题,当我尝试将表单传递给视图时,它给了我一个编译错误"找不到隐式 MessagesProvider 实例。 请参阅 https://www.playframework.com/documentation/latest/ScalaForms#Passing-MessagesProvider-to-Form-Helpers"。
项目控制器.java
package controllers;
import java.util.List;
import javax.inject.Inject;
import models.Project;
import play.data.Form;
import play.data.FormFactory;
import play.mvc.*;
import play.twirl.api.Content;
import views.html.Project.*;
public class ProjectsController extends Controller implements ControllerInterfase{
private Form<Project> projectForm;
@Inject
public ProjectsController(FormFactory formFactory) {
this.projectForm = formFactory.form(Project.class).withDirectFieldAccess(true);
}
// Create - Crea un modelo
@Override
public Result create() {
return ok((Content)create.render(projectForm));
}
}
create.scala.html
@import helper._
@(projectForm : Form[Project])
@layout("Create Project"){
<main>
@form(action = routes.ProjectsController.store()){
@inputText(projectForm("id"))
@inputText(projectForm("owner_id"))
@inputText(projectForm("name"))
<input type="submit" value="Create">
}
</main>
}
项目.java(模型(
package models;
import javax.persistence.Entity;
import javax.persistence.Id;
import io.ebean.Finder;
import io.ebean.Model;
@Entity
public class Project extends Model{
public Project() {}
@Id
public Integer id;
public Integer owner_id;
public String name;
public static Finder<Integer, Project> find = new Finder<>(Project.class);
}
知道吗?
至少对我来说,答案是在示例 play-java-forms 代码中找到
的具体说来:
1( 将消息Api注入控制器:
@Inject
public MyController(FormFactory formFactory, MessagesApi messagesApi) {
...
}
2( 将隐式参数添加到视图中:
@(form: Form[MyForm])(implicit request: Http.Request, messages: play.i18n.Messages)
3(将其传递给表单上的隐式参数:
public Result create(Http.Request request) {
Form<MyForm> form = formFactory.form(MyForm.class);
return ok(views.html.example.render(form, request, messagesApi.preferred(request)));
}