【问题标题】:how to preserve a object in play framework 2.1如何在播放框架 2.1 中保存对象
【发布时间】:2013-12-11 02:25:17
【问题描述】:

我的问题是我需要保存从 A 控制器 获得的对象列表,该控制器在 VIEW,在视图中,我需要选择要存储在数据库中的行(描述列表中的对象),然后将此 ID 带到调用对象列表的 控制器 B保存并在数据库中为选定的对象获取然后保存。

    Controller A{

     List<X> listX = math_function();
     return ok( _view.render(listX)); 

    }

    view.scala.html

    @for(listX -> X){
      <td id="@x.id"> @x.name</td>
    }

    Controller B{
...
     listX = getPreserveLists();
     x = ListX.get(get_id);
     x.save()
...
    }

我想知道如何保存这些物品。谢谢。

【问题讨论】:

    标签: java scala playframework playframework-2.0 playframework-2.1


    【解决方案1】:

    您可以将它们保存到 KVM(如 redis)但我不推荐这种方式,因为您在控制器中计算它们,这意味着它不需要太多时间。所以,你应该每次都计算它们。

    如果 ma​​th_function 花费大量时间,则不应在控制器中执行它们。 从 http 请求(如批处理)中执行它并将结果存储在 DB、KVM 等...或Memoize 函数中。

    【讨论】:

      【解决方案2】:

      一种选择是使用here 描述的play.api.cache.Cache 对象。

      您可以将数据存储在缓存中:

      // if listX could be different for every user, 
      // you could use user.login as a key
      Cache.set(user.login, listX) 
      

      然后您可以稍后检索listX

      val maybeLisX: Option[List[X]] = Cache.getAs[List[X]](user.login)
      

      我想补充一点,只有在计算 listX 是一项昂贵的操作时才值得这样做。如果 listX 对于相同的输入可能不同,您肯定不想这样做。在这种情况下,您应该重新计算 listX。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 2014-01-28
        相关资源
        最近更新 更多