我有一个要求,其中应包括年龄方面的一些条件。
例如少于10天,10至30天,1个月至3个月,4个月至12个月,1年至2年。

我有一个包含一个属性age(integer)的域类,并且我正在计算当前日期的年龄表dob并存储在DB中。我在搜索页面中有根据年龄进行搜索的搜索条件,那么如何在下拉列表中显示这些条件向下,当我选择一个选项时,如何根据年龄显示结果。

目前,我正在以下拉列表形式显示所有年龄段的数据库,请找到代码并帮助我执行此操作,如果不清楚,请编写注释,以便我可以解释您。

这是我的下拉列表,包含所有选项

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

这是我的脚本,通过ajax调用从 Controller 获取dob
 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;
        }
    }

最佳答案

将年龄存储在数据库中是一个坏主意,因为它一直在变化-最好坚持使用DOB。

由于选项集是固定的,因此为其创建类似于enum的内容,使用其values()呈现selectenum 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
  }
}

10-06 05:16
查看更多