2016-04-20 9 views
0

Ich habe diese kleine Anwendung, ich möchte nur ein einfaches Formular erstellen und die Benutzereingabe speichern, aber jedes Mal, wenn ich versuche, die Anwendung auszuführen, bekomme ich eine java.lang. Nullpointer, es sagt mir der Fehler in der Index-Methode in der Controller-Klasse, wenn das Formular in definitionFormAbspielen 2.5 java.lang.NullPointerException in Form

Hier erklärt ist mein Controller

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()); 

}} 

das Modell

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

Und hier sind die Fehler

! @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) 

I

ebean.default = ["models.*"] 

in meiner Anwendung conf und die Play Ebean Plugin aktiviert haben, ich bin nicht wirklich sicher, was das Problem ist.

+0

Versuchen statisch zu entfernen, wenn FormFactory Injektion, scheint es, dass FormFactory überhaupt nicht eingespritzt wird. – Tijkijiki

+0

Danke, das hat mein Problem gelöst. – user2308612

+0

haben Sie jemals das Null-Zeiger-Problem mit dem 'MailerClient' gelöst, ich habe den gleichen Fehler, mit' @Inject MailerClient Mailerclient', der zu meinem Controller, nicht statische Präfix hinzugefügt wird, aber dieser Nullzeiger Fehler bleibt bestehen. p.s. 'Play 2.6.x' – KGCybeX

Antwort

1

Nur dies als eine Antwort für den Fall, dass jemand stolpert (Tijikijiki hat es bereits im Kommentar angegeben): das FormFactory Feld sollte nicht statisch sein.

Weitere Informationen:

Die Play 2.5.x Dokumentation heißt es:

Um eine Klasse wickeln Sie einen play.data.FormFactory in Ihrem Controller zu injizieren haben, die können Sie dann Erstellen Sie das Formular:

Formular userForm = formFactory.form (User.class);

So ist der richtige Weg, die FormFactory in die Steuerung zu injizieren ist wie folgt:

package controllers; 

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

public class Application extends Controller { 

    @Inject FormFactory formFactory; 

    ... 
} 
+0

Ich habe versucht, das' statische 'auch zu entfernen, und funktioniert immer noch nicht für mich. –

Verwandte Themen