2016-04-20 9 views
0

私はこの小さなアプリケーションを持っています。単純なフォームを作成してユーザー入力を保存したいのですが、アプリケーションを実行しようとするたびにjava.langが得られます。 NullPointerExceptionが、それは私のコントローラはPlay 2.5 java.lang.NullPointerException in Form

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>(){}; 
    } 
です。ここdefinitionForm

でフォームを宣言するときにエラーが、コントローラクラスのindexメソッドである私に語りました

そして、ここでは

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

私は自分のアプリケーションのconfで

ebean.default = ["models.*"] 

を持っており、有効にプレイEbeanプラグインは、私は問題が何であるか本当にわからないエラーです。

+0

てみてください、FormFactoryがすべてで注入されていないようです。 – Tijkijiki

+0

ありがとう、それは私の問題を解決しました。 – user2308612

+0

あなたは 'MailerClient'でヌルポインタの問題を解決しましたか?静的プレフィックスではなく私のコントローラに追加された' @Inject MailerClient mailerclient'を使って同じエラーが発生しましたが、このヌルポインタエラーはそのままです。 p.s. 'Play 2.6.x' – KGCybeX

答えて

1

誰かがつまずいた場合に備えて、これを回答に入れてください(コメントにはすでにTijkijikiが記載しています)。FormFactoryフィールドは、静的であるべきではありません

詳細情報:

プレイ2.5.xのドキュメントは、それを述べた:

あなたは、あなたがすることができますあなたのコントローラにplay.data.FormFactoryを注入する必要があるクラスをラップするにはフォームを作成します。

フォームuserForm = formFactory.form(User.class);フォームを作成します。

だから、コントローラにFormFactoryを注入するための正しい方法は、このようなものです:FormFactoryを注入する際に、静的を削除する

package controllers; 

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

public class Application extends Controller { 

    @Inject FormFactory formFactory; 

    ... 
} 
+0

私は' static'も削除しようとしましたが、それでも私にとってはうまくいきません。 –