2017-03-23 27 views
0

我只想在SELECT更改时渲染部分模板。我试过onchange和remotFunction,但它不会编译。Grails在选择中对更改进行部分模板渲染

在我写的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]] 

我已经看到了很多不同的解决方案但它们更复杂,我只想在选择更改时呈现一块gsp,并且我不认为我需要任何参数。

+0

如果你使用Grails 3,你必须添加这个依赖项(不推荐)到你的应用程序https://plugins.grails.org/plugin/grails/ajax-tags –

回答

1

您使用的是哪个版本的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的,在建立连结声明如果不改变这一点。

你必须告诉你要去哪个区域的画面与你的模板进行更新,在这种情况下,我们更新与ID divToUpdate一个div功能,再次改变,以适应您的GSP。

控制器应该工作没关系,是假设你有一个在同一个目录,作为这一控制器其他GSP文件名为_AvailableProductData模板。

+0

工作,错误消失了,该页面呈现,但没有按预期工作。我想使用选定的sawMill在像 – larand

+0

这样的过滤器中使用,这工作,错误消失,页面呈现,但它没有按预期工作。我想使用选定的sawMill在这样的过滤器中使用。发生这种情况时,sawMill参数为空,我不知道如何将选定的值传递给过滤器。 – larand

+0

为了确保sawMill值被发送到availableProducts动作,您将能够使用params.sawMill现在检索到更新的答案。 –