I am trying to save a new tag entered in input field that was not there in database and want to save that created tag on form submit. Here is my controller which is sending the autocomplete list to the tokeninput input field:

def tags = {
        def foundTags = Tag.findAllByTagnameIlike("${params.q}%")
        def output = []
        foundTags.each {
            output.add([id: it.id, name: it.tagname]) // assumes Tag has an id field exposed
        }
        if(output.size()==0){
            def c = Tag.createCriteria()
            def maxId = c.get {
                projections {
                    max('id')
                }
            }
            output.add([id:(maxId+1),name:params.q])
        }
        render output as JSON
    }

My jQuery script is:

<script type="text/javascript">
        $(document).ready(function () {
            $("#my-text-input").tokenInput("${createLink(controller: 'product', action: 'tags')}",{theme: "facebook",allowFreeTagging:"true"});
        });
    </script>

Now when I submit the form, i get params.tags as the ids of those newly entered tags in the input field.But actually these IDs do not exist and are created by output.add([id:(maxId+1),name:params.q]) just for the reason that tokeninput requires it to be there. So how do i get the tag names in the params.tags instead of the ids? Infact i require something like this map ["id1":"tagname1","id2":"tagname2".....]. So how do i get the actual tagname instead of the id fields in the server side action which persists the form params?

有帮助吗?

解决方案

Make use of the tokenValue parameter during set up.

e.g. In jQuery

    <script type="text/javascript">
            $(document).ready(function () {
                $("#my-text-input").tokenInput("${createLink(controller: 'product', action: 'tags')}",{
                   theme: "facebook",
                   allowFreeTagging:"true",
                   tokenValue:"name"
                 });
            });
        </script>

This will submit an array of names instead of IDs. If you need both name's and id's, you're probably best adding a custom attribute to each token through an onAdd parameter, and then setting that to the tokenValue.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top