在Grails中填充文件中的选择框

时间:2013-09-28 19:26:49

标签: file grails

我的应用程序中有2个选择框,它们是从db填充的,当我从第一个选择框中选择一个值时,第二个选择框通过ajax填充。这种情况很有效。但由于选择框中的值是静态的,我不想从db填充它们,我认为使用这个文件更有用并且对应用程序性能有益。那我怎么能从文件(json,xml等)填充它们?第一个选择框到第二个是一对多

1 个答案:

答案 0 :(得分:1)

这听起来像是很多工作,因为你不得不从db填充文本文件。事实上,它的最终结果与缓存解决方案无异。http://mrdustmite.blogspot.co.uk/2010/09/simple-ehcache-in-grails.html?m=1

上面提到的插件从JSON值生成主要/次要值..

https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/services/ajaxdependancyselection/AutoCompleteService.groovy

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
  }
}

https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/taglib/ajaxdependancyselection/AutoCompleteTagLib.groovy

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)

如果你想沿着这条路走下去,你应该可以使用这个功能从文本文件中重现相同的效果......