0

我的应用程序 (view1) 的主菜单包含必须仅在用户登录时显示的选项 (view2)。在 view1 中调用了一个控制器方法。此方法检查用户并以用户作为参数返回 view2。

视图1:

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

HomeController 中的方法:

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>

编译器显示此错误:

值 showOptions 不是 controllers.ReverseHomeController 的成员

我没有太多的游戏经验,所以我不确定这是调用控制器方法的正确方法。我也试过

@routes.HomeController.showOptions()

但后来我得到

不能使用返回 play.twirl.api.Html 的方法作为请求的处理程序

感谢所有帮助。谢谢 !

4

1 回答 1

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));
}
于 2017-08-14T19:22:37.027 回答