2016-04-20 5 views
0

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

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

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 плагин включен, я не совсем уверен, что проблема есть.

+0

Попытка удалить статические при закачке FormFactory, кажется, что FormFactory не вводится вообще. – Tijkijiki

+0

Спасибо, что решил мою проблему. – user2308612

+0

Вы когда-либо разрешали проблему с нулевым указателем с помощью 'MailerClient', я имею ту же ошибку, используя' @Inject MailerClient mailerclient', который добавлен в мой контроллер, а не статический префикс, но эта ошибка нулевого указателя сохраняется. постскриптум 'Play 2.6.x' – KGCybeX

ответ

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; 

    ... 
} 
+0

Я также попытался удалить« статический », и все еще не работает для меня. –

Смежные вопросы