尝试保存我的表单时出现 NullPointerException
NullPointerException when trying to save my Form
我是 PlayFramework 的新手,我正在学习 Udemy 上的视频课程。但是,他们的 Play 版本是 2.3.9,我正在尝试使用 2.5.4 版本;
当我尝试保存我的表单时,出现以下错误:
play.api.http.HttpErrorHandlerExceptions$$anon: 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$$anonfun$apply.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$$anonfun$apply.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith.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.processBatch(BatchingExecutor.scala:63)
Caused by: java.lang.NullPointerException: null
at com.avaje.ebean.Model.save(Model.java:208)
at controllers.Services.save(Services.java:28)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:227)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:227)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:156)
at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$$anon$$anon.invocation(HandlerInvoker.scala:136)
at play.core.j.JavaAction$$anon.call(JavaAction.scala:73)
at play.http.HttpRequestHandler.call(HttpRequestHandler.java:54)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
我的表格:
@(serviceForm : Form[Service])
@import helper._
@main("Service info"){
<h1>Service Information</h1>
@helper.form(action = routes.Services.save()){
<fieldset>
<legend>Service</legend>
@helper.inputText(serviceForm.field("code"), '_label -> "Code")
@helper.inputText(serviceForm.field("description"), '_label -> "Description")
</fieldset>
<input type="submit" value="Save"/>
}
}
我的模特:
@Entity
public class Service extends Model {
@Id
public String code;
public String description;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
我的控制器:
public class Services extends Controller {
@Inject FormFactory formFactory;
public Result list(){
return TODO;
}
public Result addService(){
Form<Service> serviceForm = formFactory.form(Service.class);
return ok(info.render(serviceForm));
}
public Result save(){
Form<Service> serviceForm = formFactory.form(Service.class);
Service service = serviceForm.bindFromRequest().get();
service.save();
return redirect(routes.Services.addService());
}
}
我真的不知道该何去何从。 Google 上没有多少帖子讨论这个。任何帮助都会很棒!
编辑
这有帮助吗?
Issue with bindFromRequest in Play! Framework 2.3
I have been struggling with exactly the same problem: bindFromRequest
returned nulls for "name" field. I did exactly the same what a guy in
this Play for Java introduction video did:
youtube.com/watch?v=bLrmnjPQsZc . But still no luck. I've been working
on Windows 7 with JDK 1.8. IDE: Eclipse 4.4.0. And I run activator
through cygwin.
This is what solved the problem for me:
In Eclipse: Project -> Build Automatically - > turn off In cygwin:
./activator clean; ./activator compile; ./activator run; After this,
bindFromRequest binds name correctly and puts it into the database.
对于那些可能有相同或相关问题的人。 。基本上,我的问题是 Ebean 插件版本。
此外,您可以在我的存储库中看到我的更改 here。
我是 PlayFramework 的新手,我正在学习 Udemy 上的视频课程。但是,他们的 Play 版本是 2.3.9,我正在尝试使用 2.5.4 版本;
当我尝试保存我的表单时,出现以下错误:
play.api.http.HttpErrorHandlerExceptions$$anon: 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$$anonfun$apply.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$$anonfun$apply.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith.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.processBatch(BatchingExecutor.scala:63)
Caused by: java.lang.NullPointerException: null
at com.avaje.ebean.Model.save(Model.java:208)
at controllers.Services.save(Services.java:28)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:227)
at router.Routes$$anonfun$routes$$anonfun$applyOrElse$$anonfun$apply.apply(Routes.scala:227)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:157)
at play.core.routing.HandlerInvokerFactory$$anon.resultCall(HandlerInvoker.scala:156)
at play.core.routing.HandlerInvokerFactory$JavaActionInvokerFactory$$anon$$anon$$anon.invocation(HandlerInvoker.scala:136)
at play.core.j.JavaAction$$anon.call(JavaAction.scala:73)
at play.http.HttpRequestHandler.call(HttpRequestHandler.java:54)
at play.core.j.JavaAction$$anonfun.apply(JavaAction.scala:108)
我的表格:
@(serviceForm : Form[Service])
@import helper._
@main("Service info"){
<h1>Service Information</h1>
@helper.form(action = routes.Services.save()){
<fieldset>
<legend>Service</legend>
@helper.inputText(serviceForm.field("code"), '_label -> "Code")
@helper.inputText(serviceForm.field("description"), '_label -> "Description")
</fieldset>
<input type="submit" value="Save"/>
}
}
我的模特:
@Entity
public class Service extends Model {
@Id
public String code;
public String description;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
我的控制器:
public class Services extends Controller {
@Inject FormFactory formFactory;
public Result list(){
return TODO;
}
public Result addService(){
Form<Service> serviceForm = formFactory.form(Service.class);
return ok(info.render(serviceForm));
}
public Result save(){
Form<Service> serviceForm = formFactory.form(Service.class);
Service service = serviceForm.bindFromRequest().get();
service.save();
return redirect(routes.Services.addService());
}
}
我真的不知道该何去何从。 Google 上没有多少帖子讨论这个。任何帮助都会很棒!
编辑
这有帮助吗?
Issue with bindFromRequest in Play! Framework 2.3
I have been struggling with exactly the same problem: bindFromRequest returned nulls for "name" field. I did exactly the same what a guy in this Play for Java introduction video did: youtube.com/watch?v=bLrmnjPQsZc . But still no luck. I've been working on Windows 7 with JDK 1.8. IDE: Eclipse 4.4.0. And I run activator through cygwin.
This is what solved the problem for me:
In Eclipse: Project -> Build Automatically - > turn off In cygwin: ./activator clean; ./activator compile; ./activator run; After this, bindFromRequest binds name correctly and puts it into the database.
对于那些可能有相同或相关问题的人。
此外,您可以在我的存储库中看到我的更改 here。