2017-03-23 3 views
0

Ich möchte nur eine partielle Vorlage, wenn ein SELECT geändert wird. Ich habe onchange und remotFunction versucht, aber es wird nicht kompiliert.Grails Rendering eine partielle Vorlage für Änderungen in Select

In der gsp ich geschrieben habe:

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

und in der Steuerung:

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

Der Fehler:

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]] 

ich viele verschiedene Lösungen gesehen haben aber sie sind komplexer, ich möchte nur ein Stück gsp machen, wenn die Auswahl ändert und ich glaube nicht, dass ich irgendwelche Parameter brauche.

+0

Wenn Sie Grails 3 verwenden, müssen Sie diese Abhängigkeit hinzufügen (nicht empfohlen) zu Ihrer App https://plugins.grails.org/plugin/grails/ajax-tags –

Antwort

1

Welche Version von Grails verwendest du?

remoteFunction in 2.4.x veraltet wurde

Sie können Ihre eigene Ajax-Funktion wie verwenden:

<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> 

ich Ihren Controller angenommen habe, ist Product genannt, das in der Anweisung Create ändern, wenn es nicht.

Sie müssen der Funktion mitteilen, welchen Bereich des Bildschirms Sie mit Ihrer Vorlage aktualisieren werden. In diesem Fall aktualisieren wir ein div mit id divToUpdate, ändern Sie es erneut, um es an Ihr gsp anzupassen.

Der Controller sollte in Ordnung funktionieren, vorausgesetzt, Sie haben eine Vorlage namens _AvailableProductData im selben Verzeichnis wie die anderen gsp-Dateien für diesen Controller.

+0

Das hat funktioniert, der Fehler ist weg und Die Seite wird gerendert, aber es hat nicht wie erwartet funktioniert. Ich wollte die ausgewählte sawMill in einem Filter wie – larand

+0

verwenden Das hat funktioniert, der Fehler ist weg und die Seite rendert, aber es hat nicht wie erwartet funktioniert. Ich wollte die ausgewählte sawMill in einem Filter wie Aber das war nicht Es passiert nicht, der sawMill-Parameter ist leer und ich weiß nicht, wie ich den ausgewählten Wert zum Filter bringen soll. – larand

+0

Aktualisierte Antwort, um sicherzustellen, dass der sawMill-Wert an die Aktion availableProducts gesendet wird. Sie können jetzt mit params.sawMill abrufen. –