2017-08-12 16 views
0

私のアプリケーション(view1)のメインメニューには、ユーザーがログオンしたときに表示する必要があるオプション(view2)が含まれています。 view1では、コントローラメソッドが呼び出されます。このメソッドは、ユーザーをチェックし、userをパラメーターとしてview2を返します。Play Framework- playtwirl.api.Htmlを返す方法

View1を:に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); 
} 

VIEW2:

@(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

あなたは2番目のテンプレートへを通してそれを渡すために最初のテンプレートに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