Grails 2.3.x更新GSP中的列表(查看)并保存数据库中的更改

时间:2014-04-25 19:56:02

标签: list grails save gsp

假设您有一个显示书籍列表的表格(如索引一样),并且您希望在名为“已售出”的列中进行更改(例如,复选框)。 因此,一旦完成“检查”已售出的书籍,就要将其保存在数据库中。如何将该列表发送回控制器并进行更新?

所以,代码就是这样,在控制器中:

def aMethod(){
...
[bookInstanceList: myBookList]
}

在GSP中:

        <g:each in="${bookInstanceList}" status="i" var="bookInstance">
            <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

                <td><g:link action="show" id="${bookInstance.id}">${fieldValue(bean: bookInstance, field: "author")}</g:link></td>
                <td><g:checkBox name="sold" value="${bookInstance?.sold}" /></td>
                <td>
            </tr>
        </g:each>

这个想法是通过复选框让用户更改该书中的“已售出”值。如何保存我的新bookInstanceList?

非常感谢

1 个答案:

答案 0 :(得分:1)

从我看到你想要在用户点击复选框时动态更新后端?

如果是这样,那么你需要一个这样的ajax调用:

 <g:each in="${bookInstanceList}" status="i" var="bookInstance">
            <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">

                <td><g:link action="show" id="${bookInstance.id}">${fieldValue(bean: bookInstance, field: "author")}</g:link></td>
                <td><g:checkBox name="sold" value="${bookInstance?.sold}" onChange="TriggerFilter(this)" /></td>
                <td>
            </tr>
        </g:each>

<g:javascript>
function TriggerFilter(e) {
   if (e.checked==true) {
     $.get('<g:createLink action='Your_Action' controller="YourController" 
      params="[ filterbind: ''+attrs.filterbind+'',term:''+attrs.term+'' ]"/>'
      ,function(data){
         $('#FilterField').hide().html(data).fadeIn('slow');
       });
   }else{
     $('#FilterField').hide().html('').fadeIn('slow');
   }
}
</g:javascript>



<div id="FilterField" class="filterField">
{Result returned in here}
</div>

你需要将e.value放入params看看grails java script get createLink我的插件中有很多例子:

https://github.com/vahidhedayati/ajaxdependancyselection/tree/master/grails-app/views

我建议在线查看/阅读如何使用

您可能希望将get更改为:

how to use grails ${createLink} in javascript

var url = '${createLink(controller:'Books', action: 'update')}' + e.value ;
$.get(url ,function(data){
             $('#FilterField').hide().html(data).fadeIn('slow');
           });
       }else{
         $('#FilterField').hide().html('').fadeIn('slow');
       }
    }