在Play Framework中处理全局搜索框

时间:2014-04-06 19:17:27

标签: java playframework playframework-2.0

在我的网页上,我希望有一个全局搜索框,即每个子页面上都可以使用的搜索框(比如在SO的网页标题中)。为此,我将搜索表单放在“基础”模板中,该模板用于每个子页面,并且工作正常。但是当我想显示显示搜索结果的页面时,我的问题就出现了。在这样的页面上,我想实现以下之一:

  1. 在此全局搜索框中显示查询字符串值。
  2. 隐藏全局搜索框(因此我可以在结果页本身中添加更高级的搜索框)。
  3. 要做第一件事,我必须向基本模板提供查询字符串。这意味着,我将不得不为基础模板添加新参数,因此每个视图也需要这样的参数(大部分时间都是空字符串)。我对吗?有更简单的方法吗?

    对于第二件事,我必须检测当前URL并检查这是否是搜索结果页面。似乎要实现这一点,我必须将请求参数添加到基本模板(这基本上意味着它与提供查询字符串的问题相同)。

    有更简单的方法吗?

    顺便说一下,我正在使用java。

2 个答案:

答案 0 :(得分:1)

您的问题与本网站目前排名最高的playframework-2.0问题的精神相同。我建议您查看问题的accepted answer,特别是有关HTTP上下文的部分。在上下文中使用args映射将允许您实现任一行为:

  

在此全局搜索框中显示查询字符串值。

让处理搜索请求的操作将搜索词放入特定键下的上下文映射中,然后在搜索框标记中检查此键。

  

隐藏全局搜索框(因此我可以在结果页本身中添加更高级的搜索框)。

让处理搜索请求的操作将布尔值放入特定键下的上下文映射中,然后根据此键的存在/值有条件地呈现搜索框标记。

答案 1 :(得分:1)

  • 首先,您可以在 base 布局中使用 optionall 参数,就像

    一样
    @(title: String, query: String = null)
    

    因此,您只能在结果视图中使用它:

    @myBaseLayout(title="Search results", query=query) 
    
  • 为了在搜索结果中隐藏搜索框,您可以使用Scala条件或javascript,这里没有魔法
  • 您可以为搜索结果使用单独的布局