我的应用程序中有2个选择框,它们是从db填充的,当我从第一个选择框中选择一个值时,第二个选择框通过ajax填充。这种情况很有效。但由于选择框中的值是静态的,我不想从db填充它们,我认为使用这个文件更有用并且对应用程序性能有益。那我怎么能从文件(json,xml等)填充它们?第一个选择框到第二个是一对多
答案 0 :(得分:1)
这听起来像是很多工作,因为你不得不从db填充文本文件。事实上,它的最终结果与缓存解决方案无异。http://mrdustmite.blogspot.co.uk/2010/09/simple-ehcache-in-grails.html?m=1
上面提到的插件从JSON值生成主要/次要值..
def selectSecondary(params) {
if (params.domain2) {
def domainClass = grailsApplication?.getDomainClass(params?.domain2)?.clazz
def query = {
eq params.bindid, params.id.toLong()
projections {
property(params.collectField)
property(params.searchField)
}
order(params.searchField)
}
def results =domainClass.createCriteria().list(query)
def primarySelectList = []
results.each {
def primaryMap = [:]
primaryMap.put('id', it[0])
primaryMap.put('name', it[1])
primarySelectList.add(primaryMap)
}
return primarySelectList as JSON
}
}
def gsattrs=['optionKey' : "${attrs.collectField}" , 'optionValue': "${attrs.searchField}", 'id': "${attrs.id}", 'value': "${attrs.value}", 'name': "${name}"]
gsattrs['from'] = primarylist
gsattrs['noSelection'] =attrs.noSelection
gsattrs['onchange'] = "${remoteFunction(controller:''+attrs.controller+'', action:''+attrs.action+'', params:'\'id=\' + escape(this.value) +\'&setId='+attrs.setId+'&bindid='+ attrs.bindid+'&collectField='+attrs.collectField2+'&searchField='+attrs.searchField2+'&domain2='+attrs.domain2+'&controller='+attrs.controller+'\'',onSuccess:''+attrs.id+'Update(data)')}"
def link = ['action': attrs.action , 'controller': attrs.controller ]
out<< g.select(gsattrs)
如果你想沿着这条路走下去,你应该可以使用这个功能从文本文件中重现相同的效果......