Grails使用JQuery自动完成

时间:2014-10-28 23:00:34

标签: jquery grails

我尝试在我的grails应用程序的表单中实现自动完成功能。目前使用下面的代码,当您在parameterName字段中键入任何字符/单词时,它将返回parameter_name列中的每个值。

你可以想象我只是希望它根据我输入的内容来建议值。所以,如果我输入' card'它应该建议以单词卡开头的值。为了实现这一目标,我需要对下面的代码进行哪些修改?

我在form.gsp中的函数:

<script>
$(function() {

$( "#parameterName" ).autocomplete({
  source: '${g.createLink(controller: 'templateInput', action: 'suggestedParameterNames')}'
  });
 });
</script>

我在控制器中为templateInput提供的功能:

def suggestedParameterNames() {
    def suggestions = templatingService.getSuggestedParamNameValues()

    render suggestions as JSON
}

我服务中的功能:

def getSuggestedParamNameValues(){
    def sql = new Sql(dataSource)
    def row = sql.rows("select distinct parameter_name from template_input")

    return row
}

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

jQuery autocomplete提供了一个term参数,其中包含用户键入的文本(假设您使用的是http://api.jqueryui.com/autocomplete/版本)。因此,您首先需要对正在发送的内容进行测试,然后将其传递给您的服务:

def suggestedParameterNames(String term) { 
    log.debug "input text = ${term}"
    def suggestions = templatingService.getSuggestedParamNameValues(term)
    render suggestions as JSON
}

搜索包含子字符串查询的域对象的常用方法是使用动态查找器通过类似SQL的命令:

def foundItems = MyDomain.findAllByFooLike(terms + "%", params)

或通过SQL(猜测语法可能不正确)

def row = sql.rows("select distinct parameter_name from template_input where parameter_name like " + terms + "%")

然后你可能必须将List返回的对象按到jQuery自动完成所期望的JSON结构中(例如,创建一个模仿预期格式的Groovy数据结构,然后返回as JSON