1

Play 2.1.2 を使用していますが、動的フォームを使用したいと考えています。自分の小さな hello world プロジェクトで試してみたところ、すべてうまくいきましたが、他の大きなプロジェクトでフォームを使用すると、例外が発生します。これが私のコードです(両方のプロジェクトで同じです):

コントローラ

public static Result signInForm() {
    DynamicForm form = Form.form().bindFromRequest();   //exception on this line
    return renderJapid(form);
}

ルート

GET     /sign-in                                            controllers.Authentication.signInForm()

localhost:9000/sign-in に移動すると、次の例外が発生します。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class play.data.format.Formatters
at play.data.Form.bind(Form.java:320) ~[play-java_2.10.jar:2.1.2]
at play.data.DynamicForm.bind(DynamicForm.java:100) ~[play-java_2.10.jar:2.1.2]
at play.data.DynamicForm.bindFromRequest(DynamicForm.java:71) ~[play-java_2.10.jar:2.1.2]
at controllers.Authentication.signInForm(Authentication.java:310) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]

助けてくれますか?どこに問題があるのでしょうか? 両方のプロジェクトで Global.java と application.conf を確認しましたが、この問題の原因となるものは見つかりませんでした。

更新

このコードを入れてみました

FormattingConversionService fcs = Formatters.conversion;

動的フォーム呼び出しのある行の前。ブラウザで localhost:9000/sign-in をリロードした後、その新しい行で次の例外が発生しました。

Caused by: java.lang.NullPointerException: null
at play.data.format.Formatters.register(Formatters.java:186) ~[play-java_2.10.jar:2.1.2]
at play.data.format.Formatters.<clinit>(Formatters.java:100) ~[play-java_2.10.jar:2.1.2]
at controllers.Authentication.signInForm(Authentication.java:310) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at play.core.Router$HandlerInvoker$$anon$6$$anon$2.invocation(Router.scala:175) ~[play_2.10.jar:2.1.2]

それで、フォーマッターはクラスパスにあるようです。しかし、ブラウザーの再読み込みボタンをもう一度押すと、以前と同じ NoClassDefFoundError が表示されます (今回は追加した行で)。

4

1 に答える 1

3

NoClassDefFoundError は通常、クラスがクラスパスにないことを意味します。コンパイルしたときはあったのかもしれませんが、今はなくなっています (これは主に共有ライブラリで見られます)。

NoClassDefFoundError ドキュメント

おそらく play-java_2.10.jar が見つからないようです。

編集:(コメントを要約するため)

Play jar は、Spring を使用してデータをバインドします。最初の考えでは、Spring はクラスパスに含まれていませんでしたが、含まれていました。ただし、クラスパス上の Spring は、lib フォルダー内のいくつかの Spring jar と競合しているようです。libフォルダーのjarを削除すると、エラーが解消されたようです。:)

于 2013-08-28T21:59:23.273 に答える