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]

因此,Formatters 似乎在类路径中。但是当我再次点击浏览器中的重新加载按钮时,我得到了与以前相同的 NoClassDefFoundError (这次在我添加的行上)。

4

1 回答 1

3

NoClassDefFoundError 通常意味着该类不在类路径中。可能在您编译它时它就在那里,但现在它不见了(主要在共享库中看到)。

NoClassDefFoundError 文档

看起来它可能找不到 play-java_2.10.jar。

编辑:(总结评论)

Play jar 使用 Spring 来绑定数据。最初的想法是 Spring 没有包含在类路径中,但确实包含。但是,classpath 上的 Spring 似乎与 lib 文件夹中的一些 Spring jar 有冲突。删除 lib 文件夹中的 jar 似乎已经清除了错误。:)

于 2013-08-28T21:59:23.273 回答