Воспроизвести 2.5 java.lang.NullPointerException в форме

У меня есть это небольшое приложение, я просто хочу создать простую форму и сохранить пользовательский ввод, однако каждый раз, когда я пытаюсь запустить приложение, я получаю java.lang.NullPointerException, оно сообщает мне ошибка в методе index в классе контроллера, при объявлении формы в DefinitionForm

Вот мой контроллер

public class HomeController extends Controller {
@Inject 
public static FormFactory formFactory;

public Result index() {
    Form<Definition> definitionForm = formFactory.form(Definition.class);
    return ok(index.render(definitionForm,"Your new application is ready."));
}
public Result submit(){
    Form<Definition> definitionForm = formFactory.form(Definition.class).bindFromRequest();
    Definition definition=definitionForm.get();
    definition.save();
    return redirect(routes.HomeController.index());

}}

Модель

@Entity
public class Definition extends Model {
@Id
public Long id;

@Constraints.Required
public String name;

public String definition;
public String category;
public static final Model.Find<Long,Definition> find = new Model.Find<Long,Definition>(){};
  }

А вот ошибки

    ! @6pnmighcp - Internal server error, for (GET) [/] ->

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[CompletionException: java.lang.NullPointerException]]
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
    at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160)
    at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188)
    at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
    at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
Caused by: java.util.concurrent.CompletionException: java.lang.NullPointerException
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
    at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:593)
    at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977)
    at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:21)
    at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:18)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at scala.concurrent.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:63)
Caused by: java.lang.NullPointerException: null
    at controllers.HomeController.index(HomeController.java:27)
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(Routes.scala:157)
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(Routes.scala:157)
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:157)
    at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:156)
    at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$14$$anon$3$$anon$1.invocation(HandlerInvoker.scala:136)
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:73)
    at play.http.HttpRequestHandler$1.call(HttpRequestHandler.java:54)
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:108)
    at play.core.j.JavaAction$$anonfun$7.apply(JavaAction.scala:108)

У меня есть

ebean.default = ["models.*"]

в моей конфигурации приложения и включенном плагине Play Ebean, я не совсем уверен, в чем проблема.


person user2308612    schedule 20.04.2016    source источник
comment
Попробуй убрать статику при инжекте FormFactory, вроде FormFactory вообще не инжектится.   -  person Tijkijiki    schedule 20.04.2016
comment
Спасибо, это решило мою проблему.   -  person user2308612    schedule 20.04.2016
comment
Вы когда-нибудь решали проблему нулевого указателя с помощью MailerClient, у меня такая же ошибка, используя @Inject MailerClient mailerclient, который добавляется к моему контроллеру, а не статический префикс, но эта ошибка нулевого указателя сохраняется. p.s. Play 2.6.x   -  person CybeX    schedule 13.08.2017


Ответы (1)


Просто поместите это как ответ на случай, если кто-то наткнется (Tijkijiki уже указал это в комментарии): поле FormFactory не должно быть статическим.

Дополнительная информация:

В документации Play 2.5.x говорится:

Чтобы обернуть класс, вы должны внедрить play.data.FormFactory в свой контроллер, который затем позволит вам создать форму:

Форма userForm = formFactory.form(User.class);

Таким образом, правильный способ внедрить FormFactory в контроллер выглядит следующим образом:

package controllers;

import play.*;
import play.mvc.*;

public class Application extends Controller {

    @Inject FormFactory formFactory;

    ...
}
person Anton    schedule 20.04.2016
comment
Я также пытался удалить static, но у меня все еще не работает. - person Valter Silva; 01.09.2016