加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Play框架2:如何在路由,视图和控制器之间传递对象?

发布时间:2020-12-16 09:08:07 所属栏目:安全 来源:网络整理
导读:我正在尝试将一个book对象从视图传递到路由,然后将其发送到控制器中进行计算.我的代码如下: bookList.scala.html @(books: java.lang.Iterable[Book])@main("BookList"){ div class="row" @for(book - books.iterator()){ div class="col-sm-6 col-md-4" di
我正在尝试将一个book对象从视图传递到路由,然后将其发送到控制器中进行计算.我的代码如下:

bookList.scala.html

@(books: java.lang.Iterable[Book])

@main("BookList"){
    <div class="row">
        @for(book <- books.iterator()){
            <div class="col-sm-6 col-md-4">
                <div class="thumbnail" style="height: 435px">
                         ...
                        <p><a href="@routes.Application.buy(book)" class="btn btn-primary" role="button"
                              style="vertical-align:bottom">Order now!</a>
                    </div>
                </div>
            </div>
        }
    </div>

}

路线

...
GET     /order                      controllers.Application.buy(book: models.Book)
...

但是,它给了我一个错误:找不到类型models.Book的QueryString绑定器.尝试为此类型实现隐式QueryStringBindable.

我试图改变路线:

GET     /order                      controllers.Application.buy(book)

它还返回了一个错误:

type mismatch; found : String required: models.Book

解决方法

这不是播放路由的工作原理. Play路由器解析URL或查询字符串中的变量,并通过QueryBindable类型类将它们转换为本机类型.你应该有更像这样的东西:

路线

GET /order/:bookid           controllers.Application.buy(bookid: String)

行动应该是这样的:

Application.scala

def buy(bookid: String) = Action { request =>
    // Look up book by id here.
   Ok(views.html.thanks("you bought a book!"))
}

这样的模板:

bookList.scala.html

@for(book <- books.iterator()) {
    ...
    <a href="@routes.Application.buy(book.id)" class="btn btn-primary"         
}

当然,如果模型的ID不是String,则需要修改路径的参数类型

更新 – 使用表单/ POST替代

使用POST方法的表单是更好的解决方案,或者用户每次单击URL时都会购买另一本书,并且ID将被公开.查看forms文档.你的模板是这样的:

@for(book <- books.iterator()) {
    ...
    <form method="post">
      <div>@book.name</div>
      <input type="hidden" value="@book.id"/><button type="submit">buy</button>
    </form>
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读