2017-08-12 113 views
0

我的應用程序(view1)的主菜單包含只有在用戶登錄(view2)時才必須顯示的選項。在view1中調用一個控制器方法。此方法檢查用戶並返回view2,並將用戶作爲參數。Play Framework-如何返回play.twirl.api.Html

視圖1:在HomeController的

@import com.feth.play.module.pa.views.html._ 
<div class="container-fluid"> 
    <ul> 
     <li><a href="#">menu 1</a></li> 
     <li><a href="#">menu 2</a></li> 
    </ul> 
</div> 
<div id="logged"> 
    @controllers.HomeController.showOptions() 
</div> 

方法:

public Html showOptions(){ 
    final User localUser = getLocalUser(session()); 
     return view2.render(localUser); 
} 

視圖2:

@(logged: User = null) 
@if(logged!=null) { 
    <div id="userMenu"> 
     <ul class='nav'> 
      <li><a href="#">user option 1</a></li> 
      <li><a href="#">user option 2</a></li> 
     </ul> 
</div> 

編譯器示出了這樣的錯誤:

value showOptions is not a member of controllers.ReverseHomeController

我沒有太多的遊戲經驗,所以我不確定這是調用控制器方法的正確方法。我也試圖與

@routes.HomeController.showOptions() 

但後來我得到

Cannot use a method returning play.twirl.api.Html as a Handler for requests

所有幫助表示讚賞。謝謝 !

+0

我猜你應該使用包括這裏,而不是再次調用控制器:https://www.playframework.com/documentation/2.6.x/ScalaTemplateUseCases#Includes – rethab

回答

0

您需要將loggedUser傳遞到第一個模板,以便通過將它傳遞給第二個模板:

視圖1:

@(user: User) 
<div class="container-fluid"> 
    <ul> 
    <li><a href="#">menu 1</a></li> 
    <li><a href="#">menu 2</a></li> 
    </ul> 
</div> 
<div id="logged"> 
    @view2(user) 
</div> 

查看2可以保持原樣。爲View 1相應的控制器將是這個樣子:

public Result showView1() { 
    final User localUser = getLocalUser(session()); 
    return ok(view1.render(localUser)); 
} 
+0

我試圖避免將參數傳遞給View1 ...但我想這是最簡單的方法。謝謝 ! – maroscura

+0

唯一的選擇是創建一個REST API並從客戶端進行動態AJAX調用。 – Dexmo