【问题标题】:Play 2.3: Passing model data via controllers玩法 2.3:通过控制器传递模型数据
【发布时间】:2015-03-02 16:48:22
【问题描述】:

我有一个带有一堆过滤器的模型类:

@Entity
public class MyModel extends Model
{
   String name;
   String filterA;
   String filterB;
   String filterC;
}

基本上我将它用于带有搜索和搜索结果的页面。 提交搜索非常简单,因为我只是发布并使用bindFromRequest() 获取所有过滤器。

但是当我想分页时,我发现它有问题。当用户选择页面时,我希望能够记住这些选定的过滤器。分页链接是 GET 请求,所以我不能使用bindFromRequest()。我四处寻找QueryStringBindable,但我不明白如何绑定模型。

理想情况下,我不想将每个过滤器都传递给分页链接,因为过滤器的数量可能会不断变化。

编辑:

一个更好的框架问题是,如果我在一个页面上有一堆过滤器,然后我点击另一个页码,我怎样才能最好地将过滤器信息发送到下一页,以便可以填充所有控件?通过每个过滤器不是很干净,因为过滤器的数量可以增加。

【问题讨论】:

  • 我认为您可以在主模型中创建一个内部类,而不是为 searchdata 创建实体,就像Play Sample 中描述的那样。您也可以处理这些获取请求。
  • 我已经看过那个样本了。我的问题是 Page 对象只有几个过滤器,但我有更多,而且它们可以不断增加。我希望有一种方法可以将所有过滤器保存到用户定义的对象中。就像提交是多么容易一样。
  • 也许将 JSON 序列化到 Flash 范围内?还是会话?
  • 对不起,但我不认为这是一个好的想法(你所描述的问题)。你知道实体代表一个表,你想使用它,因为它可以让你保存以前的过滤器(不好接近我,每次都创建新行)并且你说I want to be able to remember these selected filters when the user is selecting a page如果在请求下一页用户更改搜索过滤器之前怎么办,那么为什么要保存以前的过滤器,如果它有可能为每个请求进行更改,所以它有利于通过过滤器对于每个请求
  • 我没有将它保存为每一行。我可以删除实体对象。那没关系。我只需要弄清楚如何将选定的过滤器从一个页面传递到另一个页面。当用户选择一个新的过滤器时,它可以正常工作,因为有一个提交按钮。但是分页的情况下,没有提交按钮。

标签: java playframework playframework-2.0


【解决方案1】:

最后,我能够使用 QueryStringBindable 解决分页问题。文档上有一个很好的例子 - https://www.playframework.com/documentation/2.3.1/api/java/play/mvc/QueryStringBindable.html

一旦我实现了这个接口,我就可以将 MyModel 作为参数传递给控制器​​动作以进行分页,它会将信息添加到 url,如果您希望能够复制粘贴链接,这非常有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多