首页 > 解决方案 > 未找到隐式 MessagesProvider 实例。Java 播放框架 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));
    }

} 

创建.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>

}

Project.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);


}

任何想法?

标签: javaplayframework

解决方案


至少对我来说,答案是在示例play-java-forms 代码中找到的

具体来说:

1)将MessagesApi注入控制器:

@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)));
}

推荐阅读