2012-08-07 30 views
7

在Play Framework 2中呈現Scala模板時,是否可以定義可選參數?播放2 - 如何從Java控制器設置模板參數的默認值?

我的控制器看起來是這樣的:

public static Result recoverPassword() { 
    Form<RecoveryForm> resetForm = form(RecoveryForm.class); 
    return ok(recover.render(resetForm)); 
    // On success I'd like to pass an optional parameter: 
    // return ok(recover.render(resetForm, true)); 
} 

我Scala的模板看起來是這樣的:

@(resetForm: Form[controllers.Account.RecoveryForm], success:Boolean = false) 

也試過:

@(resetForm: Form[controllers.Account.RecoveryForm]) (success:Boolean = false) 

在這兩種情況下,我得到「錯誤:方法在類恢復中的渲染不能應用於給定的類型;「

回答

6

從Java控制器不能省略的價值分配(Scala中控制器或其他模板,將工作),在這種情況下,最快,最乾淨的解決方案是分配有默認值每一次,即:

public static Result recoverPassword() { 
    Form<RecoveryForm> resetForm = form(RecoveryForm.class); 

    if (!successfullPaswordChange){ 
     return badRequest(recover.render(resetForm, false)); 
    } 

    return ok(recover.render(resetForm, true)); 
} 

Scala模板可以保持不變,因爲Scala控制器和其他可以調用模板的模板如果沒有在那裏給出,將會遵循默認值。

BTW:正如你所看到的,你應該用正確的方法從Play的actions返回結果,看ok() VS badRequest()也:forrbiden()notFound(),等等等等

您還可以使用flash scope用於填充消息,並使用redirect()成功密碼更改後的主網頁,那麼你可以只檢查是否存在閃光燈消息並顯示:在任何模板

public static Result recoverPassword() { 
    ... 
    if (!successfullPaswordChange){ 
     return badRequest(recover.render(resetForm, false)); 
    } 

    flash("passchange.succces", "Your password was reseted, check your mail"); 
    return redirect(routes.Application.index()); 
} 

@if(flash.containsKey("passchange.succces")) { 
    <div class="alert-message warning"> 
     <strong>Done!</strong> @flash.get("passchange.succces") 
    </div> 
} 

(本段來自對Java計算機數據庫樣本複製的,所以你可以檢查一下自己的磁盤上)

+0

感謝您的快速答覆。成功的var表示電子郵件已發送給用戶,在我的模板中,我呈現成功消息,而不是再次顯示密碼重置表單。我應該在模板中使用success-var和if-construct的幫助來做到這一點,還是應該更好地使用兩個不同的模板文件? – joafeldmann 2012-08-07 11:07:28

+0

這取決於這兩個模板是多麼複雜,如果他們只是一個簡單的容器與形式或消息使用一個「視圖」將是確定的。 – biesior 2012-08-07 11:10:20

+0

好的,那麼我會繼續看一個視圖。再次感謝。 – joafeldmann 2012-08-07 11:42:12