2017-03-23 96 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現在檢索到更新的答案。 –