2016-11-23 17 views
1

是否可以在Play Framework 2.5中創建沒有模型的表單?Play Framework - 創建沒有模型的表單

我試圖在控制器添加代碼:

package forms; 

import play.data.validation.Constraints; 
import play.data.Form; 


public class UserForm extends Form{ 
    @Constraints.Required 
    @Constraints.Email 
    public String email; 
} 

然後在控制器:

public Result cabinet() { 
     Form<UserForm> userform = formFactory.form(UserForm.class); 
     return ok(payment.render(userform)); } 

最後,鑑於:

@import forms.UserForm 
@(form: Form[UserForm]) 

@import b3.vertical.fieldConstructor // Declares a vertical field constructor as default 

@cabinet() { 
     @b3.form(routes.HomeController.landing) { 
     @b3.email(form("email"), '_label -> "Email", 'placeholder -> "[email protected]") 
     @b3.submit('class -> "btn btn-default"){ Sign in } 
    } 
} 

當我移動到測試網址,我有一個空異常錯誤:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[CompletionException: java.lang.NullPointerException]] 
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293) 
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) 
    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:100) 
    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.cabinet(HomeController.java:38) 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$5$$anonfun$apply$5.apply(Routes.scala:199) 
    at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$5$$anonfun$apply$5.apply(Routes.scala:199) 
    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) 

如何正確創建?

UPDATE 的問題是在FormFactory - 這應該是明確定義:

@Inject 
public HomeController(FormFactory formFactory) { 
    this.formFactory = formFactory; 
} 

這事解決了NullException麻煩

回答

1

它實際上取決於形式,形式是什麼類型的?

  1. 你想從你的數據庫驗證一些東西嗎?
  2. 當你想檢查數據庫中的值時,你需要模型
  3. 模型是業務邏輯驗證或執行並返回給MVC控制器的地方。

對於一個簡單的表格,只需使用框架控制器和視圖測試某些示例的用戶名和密碼,您不需要模型,你可以讓他們做!

請關注此video,在本視頻中,作者在模型中使用Users.java。這是最好的方式,當你想建立一個大網站時,這種方式是如何工作的。

但是,您可以使用DynamicForm在控制器中實現此功能,請檢查此post以瞭解更多詳細信息。

+1

我試過了,我遇到了一些麻煩 - 請查看第一篇文章。 –

+0

檢查更新,讓我知道如果事情不明確! – Jordon

+1

我發現問題的原因 - 請參閱更新。 Thx讓我以正確的方式:) –