实现级联更新效果有多种方式,现只介绍用jquery框架的ajax技术实现的方式,个人认为使用jquery的方式更好更灵活,因为它只负责传数据,如果用grails自带的异步更新,简单的还可以,如果是复杂一点的就比较难搞。
下列代码无需考虑业务意义
jquery的ajax实现:
1.GSP中_form.gsp的简略代码:
<div>
<g:select id="company" name="company.id" from="${companyInstanceList}"/>
</div>
<div>
<g:select id="salaryType" name="salaryType" from="${unassignedType}"/>
</div>
<div>
<g:select id="operator" name="operator.id" from="${managements}"/>
</div>
2.javascript代码
<script>
$("#company").bind("change", function(){
$("#salaryType option").remove();
var company = $("#company").val()
$.ajax({
url: "findUnassignedType",
type: "POST",
data: {'companyId': company} ,
success: function(result){
//此处result返回的是一个map,key是salaryType,value是salaryType下的operator选项
$.each(result, function(key, value){
$("#salaryType").append("<option value=" + key + ">" + key + "</option>")
$("#operator option").remove()
for(var i=0; i < value.length; i++){
$("#operator").append("<option value=" + value[i].id + ">" + value[i].name + "</option>")
}
});
}
});
});
$("#company").change();
$("#salaryType").bind("change", function(){
$("#operator option").remove();
var salaryType = $("#salaryType").val()
$.ajax({
url: "findManagements",
type: "POST",
data: {'salaryType': salaryType} ,
success: function(result){
for(var i=0; i < result.length; i++){
$("#operator").append("<option value=" + result[i].id + ">" + result[i].name + "</option>")
}
}
});
});
$("#salaryType").change();
})
</script>
3.controller代码
/**
* ajax查询未分派完的公司的项目种类
* @Author luoshida
*/
def findUnassignedType() {
def cAssigns = CAssign.findAllByCompany(Company.get(params.companyId.toLong()))
def unassignedType = CAssign.constraints.salaryType.inList
cAssigns.each{elem ->
unassignedType = unassignedType - elem.salaryType
}
Map map = new HashMap()
unassignedType.each{ elem ->
List operators = new ArrayList()
Management.findAllBySalaryTypeAndAssignType(unassignedType.get(0), "企业专管员").each{ elem02 ->
operators.add(elem02.operator)
}
map.put(elem, operators)
}
render map as JSON
}
/**
* ajax查找项目种类对应的专管员
* @Author luoshida
*/
def findManagements() {
def managements = Management.findAllBySalaryTypeAndAssignType(params.salaryType, "企业专管员")
List operators = new ArrayList()
managements.each{ elem ->
operators.add(elem.operator)
}
render operators as JSON
}
注意,返回的时候必须要以JSON字符串的类型返回,此处要导入一个包grails.converters.JSON
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。