在Play中调用控制器方法!模板

Gau*_*aui 5 java playframework

如何在Play中调用控制器方法!模板?

我有一个默认控制器,Application和该控制器内的hasliked()方法.该方法返回登录用户是否喜欢帖子ID.如果用户喜欢帖子,则返回"none",否则返回"block"(对于CSS)

我添加了以下路由:GET/hasliked/{id} Application.hasliked

我尝试了以下方法:

#{list items:postList, as:'post'} %{display = Application.hasliked(post.id); %}

<div style="display: ${display}">...</div> #{/list}

但我得到这个错误:

模板执行错误

模板/app/views/Application/dashboard.html中发生执行错误.引发的异常是NullPointerException:无法在null对象上调用方法hasliked().

Per*_*ega 6

尝试使用完全限定的名称,例如:

controllers.Application.hasliked()
Run Code Online (Sandbox Code Playgroud)

编辑评论:

您的例外问题是您正在访问控制器以获取值.那是错的.

Play中的控制器用于导航.它们是静态的,它们返回"void",并且它们调用另一个控制器方法或渲染方法.您尝试做的可能会产生意外结果.

你想要做的是获取控制器内的值并将其作为参数传递:

//On controller

public static void yourRequest() {
   //...
   Object display = getDisplay(); //get your value
   render(display);
}

//On template
<div style="display: ${display}">...</div>
Run Code Online (Sandbox Code Playgroud)

这是推荐的方式.

您获得的异常(最有可能)是因为您的Application.hasLiked()以重定向调用(render()或调用另一个控制器的方法)结束,并且在您呈现与初始调用相对应的页面时发生这种情况.所以它打破了.