2011-06-07 94 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 
    } 
}