我必须在Web项目上使用Play框架,在该框架中我必须将视图与控制器类连接起来。这意味着,我必须使用在控制器(scala)中声明的方法(scala.html)。 我真的不知道如何。 我试过类似在视图中使用控制器方法 - 播放框架 - 斯卡拉
@controller.class.method()
但它没有工作。 我查过它,但什么都没发现,也许是因为它太简单了,任何人都会问这个问题..?
我很感激帮助。
我必须在Web项目上使用Play框架,在该框架中我必须将视图与控制器类连接起来。这意味着,我必须使用在控制器(scala)中声明的方法(scala.html)。 我真的不知道如何。 我试过类似在视图中使用控制器方法 - 播放框架 - 斯卡拉
@controller.class.method()
但它没有工作。 我查过它,但什么都没发现,也许是因为它太简单了,任何人都会问这个问题..?
我很感激帮助。
您可以通过以下方式访问模板中的反向路线:
@routes.controllersFolder.MyControllerName.endPointName
这将解析为路线。
如路线文件:
GET /myApp/endpointExample controllersFolder.MyControllerName.endPointName
所以
@routes.controllersFolder.MyControllerName.endPointName
将解析:
/myApp/endpointExample
如果您正在寻找使用在客户端的AJAX我会强烈推荐JSRoutes。
如果你想有一个控制器的功能,那么你应该有它的模块,如分离:
trait MyTrait {
def add(x: Int, y: Int): Int = x + y
}
@Singleton
class MyClass with MyTrait
@Singleton
class MyController @Inject() (myClass: MyClass) extends Controller {
def endPointName(x: String, y: String): Action[AnyContent] = {
try {
Ok(
Json.toJson(
Json.obj(
"result" -> myClass.add(
x = x.toInt,
y = y.toInt
)
)
)
)
} catch {
case e: NonFatal => BadRequest(
Json.toJson(
Json.obj(
"error" -> e.getMessage
)
)
}
}
}
然后,您可以参考MyClass的逻辑,而不必形成一个请求,去耦逻辑像这样:
在HMTLmyView.scala.html
@Singleton
class MyOtherController @Inject() (myClass: MyClass) extends Controller {
def myHtmlPage(): Action[AnyContent] = {
views.html.myView(myClass)
}
}
:
@(myClass: MyClass)
@myClass.add(1, 2) // = 3
我希望这有助于 里斯
如果你想调用视图控制器,你应该用reverse routes
的帮助下做假设你的路线是这样的
GET /hello/:name controllers.Application.hello(name)
在视图定义,你可以叫它使用下面的代码
@routes.Application.hello("test")
祝你好运
你能不能给您所想要达到的目的的例子吗? – sarcan