欢迎进入Wiki » FAQ » 列表(list)页面中,如何配置默认查询条件?

列表(list)页面中,如何配置默认查询条件?

在2014-09-25 09:54上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

    显示某个domain的列表界面时,有时候需要默认只显示一部分数据,比如仅显示本年度的员工报销信息,对应属性 year。

    假如打开列表的链接配置在某个导航中,在bro-framework中,有如下几种实现方式,并且在应用场景上有略微的差异。

方式一

    列表界面中包含如下代码,用户可以选择年份进行查询:

 年份: <g:select name="d.year" from="${(2010..2030)}" noSelection="['':'']" />

    如果不希望用户能自行选择年份,可以设置css将这个select隐藏起来。

    在导航的链接中添加参数 "search.where" 和 "search.year",前者代表查询hql的where条件部分,后者表示2013这个值将作为默认值显示在上面的年份下拉列表中,如:

 <g:link controller='foobar' params="${['search.d.where':'d.year=2013', 'search.d.year':'2013']}" target=....>Foobar</g:link>

方式二

    如果希望用户不能自行选择年份,而且也不想使用css来隐藏列表框,仅需要修改导航链接,采用如下的参数:
   ['search.where':'d.year=2013', 'search.where_precondition':'d.year=2013']

    BroFWK 4.2后,简化为:
   ['search.precondition':'d.year=2013']

方式三

    如果既不希望用户自行选择,还希望不带额外的参数打开list页面,直接显示本年度的信息。也就是说,限定死只能显示本年度信息。

    可以直接修改控制器里的list模板,在查询的hql中带上年度条件即可,注意的是 xxx.count() 也需要改成条件查询如 xxx.countByYear(2013),如:

 Foobar.findAll("from ${c1} d where year=2013 ${orderBy}", [], params);

方式四

    方式三显然太缺乏灵活性了,可以略微改进一下。

    在 list.gsp 的 form 标签内,增加一个隐藏的input,如:

 <input type="hidden" name="year" value="${params.year}" />

    然后在控制器中,根据params.year进行查询,如:
   if ( !params.year ) params.year = 2013;
   Foobar.findAll("from ${c1} d where year=${params.year} ${orderBy}", [], params);

标签: BroFramework search
在2013-10-25 10:59上被李小翔创建

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号