2011-06-07 93 views
0

我有一个要求,应该有一个下拉列表,包含一些年龄条件。 类似于少于10天,10至30天,1个月至3个月,4个月至12个月,1年至2年之间。如何选择小于或大于从grails和groovy下拉的年龄

我有域类包含一个属性年龄(整数)。我正在计算年龄形式dob到当前日期和存储在DB.I有搜索条件搜索基于年龄搜索页面,所以我如何显示这些条件值下拉,当我选择一个选项如何显示基于年龄的结果。

目前我在下拉式表格中显示所有年龄段的数据库,请找到代码并帮助我做到这一点,如果它不清楚请写下评论,以便我可以解释你。

这是我的下拉contaning所有DOBS

<td><span id="availableAge" ></span></td> 

这是我的脚本得到控制DOBS与Ajax调用

function generateAge(data){ 
     var list ="<select style='width:100px' id='age' name='age'><option value=''>-Select-</option>"; 
     var opt;  
      for(var i=0; i<data.ageDetails.length; i++){ 
       opt = "<option value="+data.ageDetails[i].age+">"; 
       opt = opt+data.ageDetails[i].age; 
       opt = opt+"</option>"; 
       list = list+opt;     
      }   
     list = list+"</select>"; 
     var listObj = document.getElementById("availableAge"); 
     if(listObj){ 
      listObj.innerHTML = list; 
     } 
    } 

回答

4

这是一个坏主意来存储年龄在DB,如它始终在变化 - 更好地坚持DOB。

由于选项集是固定的,制造类似的enum它,使用它values()渲染select

enum AgeCriteriaEnum { NONE, LESS_THAN_10, BETWEEN_10_AND_30, ... so on }

,只是做一个像switch()

AgeCriteriaEnum ageEnum = AgeCriteriaEnum.valueOf(params.ageEnum) 
Date today = new Date() 

Patient.withCriteria { 
    switch(ageEnum) { 
    case AgeCriteriaEnum.NONE: 
     break; 
    case AgeCriteriaEnum.LESS_THAN_10: 
     ge('dob', today-10) 
     break; 
    case AgeCriteriaEnum.BETWEEN_10_AND_30: 
     lt('dob', today-10) 
     ge('dob', today-30) 
     break; 
     //... so on 
    } 
}