java - 未找到隐式 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);
}
任何想法?
解决方案
至少对我来说,答案是在示例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)));
}
推荐阅读
- gradlew - 父项目pitest失败,但如果单独执行子项目运行良好
- android - 带有 Firebase 的 Android 未收到来自 Node.js Firebase 应用程序的通知
- jestjs - 玩笑因 SyntaxError 失败:意外的令牌 {
- javascript - 如何在 Angular 5 中使用 javaScript TimeSheet 插件
- elasticsearch - 安装elasticsearch老版本1.3
- javascript - Axios 发布待定
- java - 在 Java 中概括和记录 SQL 查询
- r - R-工作室。安装 lubridate 后出错:找不到函数“dmy_hm”
- php - PHP Symfony DQL - 参数太少:查询定义了 1 个参数,但您只绑定了 0 个
- git - 如何在git中合并分支?