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 的模板,控制器应该可以正常工作。
我只想在更改 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 的模板,控制器应该可以正常工作。