我正在使用 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 (这次在我添加的行上)。