总体上来说,我对Grails和框架还很陌生,所以这很可能是一个非常基本的问题。我能够找到的唯一有前途的解决方案是使用Tag,显然在Grails 3中已弃用该标签。确实存在类似的问题,但从那时开始就一直存在。
我正在尝试编写一种方法来显示按子类别分组的产品,然后将这些子类别分组。当我的页面加载时,从我的数据库请求子类别和类别,并且在视图中呈现选择选项(选择标记和复选框)。
当代表子类别的复选框之一被选中时,我需要运行数据库查询以获取产品信息,并通过为返回的每一行呈现一个模板来更新HTML元素。我有一个控制器动作可以完成所有这些工作。我唯一的问题是,每当选中其中一个复选框时,我都需要一种方法来调用控制器操作。
我也许可以通过使用actionSubmit和一个隐藏的提交按钮来解决它,每当选中一个复选框时,JavaScript就会单击该按钮,但这似乎不是一个合适的解决方案。
我这里可能缺少一些非常基本的功能,但是我已经进行了彻底的搜索,并且到目前为止,还没有找到合适的解决方案,可能是因为我没有使用正确的搜索词。如果有人可以帮助我,我会很高兴。已经非常感谢!
答案 0 :(得分:1)
下面的示例使用一个激活的javascript函数来响应复选框的选中/取消选中,该复选框将其值传递给一个动作,您可以从中使用该复选框的值执行任何操作,运行查询等。目前该操作将呈现一个模板,以使用数据库结果更新视图。
index.gsp
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main" />
<script type="text/javascript">
$(document).ready(function(){
$( '#cb' ).click( function() {
var checked = $(this).is(":checked");
$.ajax( {
url: "/yourController/yourAction?checked=" + checked,
type: "get",
success: function ( data ) {
$( '#resultDiv' ).html( data )
},
error: function(jqXHR, textStatus, errorThrown) {
console.log( 'Error rendering template ' + errorThrown )
}
} );
})
});
</script>
</head>
<body>
<div id="resultDiv"></div>
<g:form>
<g:checkBox name="cb" />
</g:form>
</body>
您的控制器
class YourController {
def yourAction() {
// you may want to do something with the value of params.checked here?
def dbResults = YourDomain.getStuff()
render ( template: 'theTemp', model: [dbResults: dbResults] )
}
}
_theTemp.gsp
<table>
<caption>Table of stuff</caption>
<g:each in="${dbResults}" var="aThing">
<tr>
<td>${aThing}</td>
</tr>
</g:each>
</table>