Grails 3.3.9:选中此复选框后,呼叫控制器的操作

时间:2019-01-08 15:41:25

标签: groovy grails-controller grails3

总体上来说,我对Grails和框架还很陌生,所以这很可能是一个非常基本的问题。我能够找到的唯一有前途的解决方案是使用Tag,显然在Grails 3中已弃用该标签。确实存在类似的问题,但从那时开始就一直存在。

我正在尝试编写一种方法来显示按子类别分组的产品,然后将这些子类别分组。当我的页面加载时,从我的数据库请求子类别和类别,并且在视图中呈现选择选项(选择标记和复选框)。

当代表子类别的复选框之一被选中时,我需要运行数据库查询以获取产品信息,并通过为返回的每一行呈现一个模板来更新HTML元素。我有一个控制器动作可以完成所有这些工作。我唯一的问题是,每当选中其中一个复选框时,我都需要一种方法来调用控制器操作。

我也许可以通过使用actionSubmit和一个隐藏的提交按钮来解决它,每当选中一个复选框时,JavaScript就会单击该按钮,但这似乎不是一个合适的解决方案。

我这里可能缺少一些非常基本的功能,但是我已经进行了彻底的搜索,并且到目前为止,还没有找到合适的解决方案,可能是因为我没有使用正确的搜索词。如果有人可以帮助我,我会很高兴。已经非常感谢!

1 个答案:

答案 0 :(得分:1)

下面的示例使用一个激活的javascript函数来响应复选框的选中/取消选中,该复选框将其值传递给一个动作,您可以从中使用该复选框的值执行任何操作,运行查询等。目前该操作将呈现一个模板,以使用数据库结果更新视图。

index.gsp

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="main" />

    <script type="text/javascript">
        $(document).ready(function(){
            $( '#cb' ).click( function() {
                var checked = $(this).is(":checked");
                $.ajax( {
                    url: "/yourController/yourAction?checked=" + checked,
                    type: "get",
                    success: function ( data ) {
                        $( '#resultDiv' ).html( data )
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        console.log( 'Error rendering template ' + errorThrown )
                    }
                } );
            })

        });
    </script>
</head>
<body>

<div id="resultDiv"></div>

<g:form>
    <g:checkBox name="cb" />
</g:form>

</body>

您的控制器

class YourController {

    def yourAction() {
        // you may want to do something with the value of params.checked here?
        def dbResults = YourDomain.getStuff()
        render ( template: 'theTemp', model: [dbResults: dbResults] )
    }
}

_theTemp.gsp

<table>
    <caption>Table of stuff</caption>
    <g:each in="${dbResults}" var="aThing">
        <tr>
            <td>${aThing}</td>
        </tr>
    </g:each>
</table>