Grails 根据 select 中的变化呈现部分模板

Grails rendering a partial template on changes in select

我只想在更改 SELECT 时呈现部分模板。我尝试了 onchange 和 remotFunction,但它无法编译。

在我写的gsp中:

<g:select name="sawMill" from="${prodBuffer}" value="" onchange="${remoteFunction(action: 'availableProducts')}"/>

在控制器中:

def availableProducts() {
    render(template:"AvailableProductData", model:[prodBuffer: getBufferList()])
}

错误:

Class
groovy.lang.MissingMethodException
Message
    Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/orders_and_Store/list.gsp:154] Error executing tag <g:form>: Error evaluating expression [remoteFunction(action: 'availableProducts')] on line [24]: No signature of method: D__Grails_projects_torntrading_grails_app_views_orders_and_Store_list_gsp.remoteFunction() is applicable for argument types: (java.util.LinkedHashMap) values: [[action:availableProducts]]
Caused by
    No signature of method: D__Grails_projects_torntrading_grails_app_views_orders_and_Store_list_gsp.remoteFunction() is applicable for argument types: (java.util.LinkedHashMap) values: [[action:availableProducts]]

我见过很多不同的解决方案,但它们更复杂,我只想在 select 更改时渲染一段 gsp,我认为我不需要任何参数。

您使用的是哪个版本的 Grails?

remoteFunction 在 2 中被弃用。4.x

您可以使用自己的 ajax 函数,例如:

<head>
    <script type="text/javascript">
        function availableProducts(){
            $.ajax({
                url:'${g.createLink( controller:'product', action:'availableProducts' )}',
                data: [sawMill],
                type: 'get'
        }).success( function ( data ) { $( '#divToUpdate' ).html( data ); });
}
    </script>
<body>
    <g:select name="sawMill" from="${millList}" value="" onchange="availableProducts()"/>

    <div id="divToUpdate"></div>
</body>

我假设您的控制器名为 productController,如果不是,请在 createLink 语句中更改它。

你必须告诉函数你要用你的模板更新屏幕的哪个区域,在这种情况下我们更新一个 div id divToUpdate,再次改变适合您的 gsp。

假设您在与该控制器的其他 gsp 文件相同的目录中有一个名为 _AvailableProductData 的模板,控制器应该可以正常工作。