我有一个要求,其中应包括年龄方面的一些条件。
例如少于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()
呈现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
}
}