找不到隐式消息提供程序实例.Java Play Framework 2.8.



我在将 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)));
}

最新更新