gpt4 book ai didi

mysql - g :select using two combobox in grails

转载 作者:行者123 更新时间:2023-11-29 02:48:32 24 4
gpt4 key购买 nike

您好,我正在尝试使用两个下拉组合框列出商店。如果您没有选择国家或城市,请列出所有商店。根据城市国家或两者的其他方式列表。顺便说一句,我没有创建 Controller ,而是使用 generate-all 生成 tehm。 这是我的观点;

 <g:form action="index" method="POST">
<div class="fieldcontain">
<g:select name="ddlCountry" noSelection="[null:message(code:'default.select.label',default:'Seçiniz...')]"
from="['UK', 'NL', 'DE']"
value="${params.ddlCountry}"/>
<g:select name="ddlCity"
from="['AMSTERDAM', 'Erfurt', 'Manchester','London']"
value="${params.ddlCity}"/>

<input class="btn btn-danger" type="submit" value="Listele" />
<g:each in="${shopList}" status="i" var="shopInstance">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td>
<g:link controller="shop" action="show" params="[id:shopInstance.id]">
${fieldValue(bean: shopInstance, field: "shopName")}
</g:link>
</td>
<td>${fieldValue(bean: shopInstance, field: "shopAdress1")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopPostcode")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopCity")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopCountry")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopDateEdited")}</td>

</tr>
</g:each>
</div>
</g:form>

这是商店 Controller 索引

def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
if(params.ddlCountry || params.ddlCity) {
def shops = Shop.withCriteria {
if (params.ddlCountry) {
like('shopCountry', '%${params.ddlCountry}%')
}
if (params.ddlCity) {
like('shopCity', '%${params.ddlCity}%')
}

}
[shopList:shops]
}
else{
respond Shop.list(params), model:[shopCount: Shop.count()]
}


}

它每次都会列出所有商店。当我点击按钮页面刷新但没有任何反应

最佳答案

看来还有很多东西要学:

在名为 _index.gsp 的 myController 文件夹中创建一个新模板/文件把这个放在里面

   <g:each in="${shopList}" status="i" var="shopInstance">
<tr class="${(i % 2) == 0 ? 'even' : 'odd'}">
<td>
<g:link controller="shop" action="show" params="[id:shopInstance.id]">
${fieldValue(bean: shopInstance, field: "shopName")}
</g:link>
</td>
<td>${fieldValue(bean: shopInstance, field: "shopAdress1")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopPostcode")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopCity")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopCountry")}</td>
<td>${fieldValue(bean: shopInstance, field: "shopDateEdited")}</td>

</tr>
</g:each>

将此更改为:

            <!-- add onChange function to select you could look up item on change through jquery instead-->
<g:select name="ddlCity"
from="['AMSTERDAM', 'Erfurt', 'Manchester','London']"
value="${params.ddlCity}" onChange="verifyCity(this.value)"/>

<input class="btn btn-danger" type="submit" value="Listele" />
<!-- put a wrapper div ID around actual results -->
<div id="results">
<!-- make it render template now the controller action renders same content for this bit -->
<g:render template="/myController/index" />
</div>
<!-- END Wrapper -->
</div>


<script>
//Write some java script to handle the actions clicked

//VerifyCity will work on city click
//Hopefully this should be all it needs it gets a value builds a data array passes it to load results
function verifyCity(value) {
//
var data={ddlCity:value}
loadResults(data);
}

//Same as above for country
function verifyCountry(value) {
var data={ddlCountry:value}
loadResults(data);
}

//This runs a jquery post to the CONTROLLERNAME - define this and your action
//when it has a success it updates results DIV with the content
function loadResults(data) {
$.ajax({timeout:1000,cache:true,type: 'post',url: "${g.createLink(controller: 'CONTROLLERNAME', action: 'index')}",
data:data,
success: function(output) {
$('#results').html(output);
}
});
</script>

显示结果的片段现在在它自己的模板中,当它正常呈现时它调用模板。当进行 ajax 调用时,它会呈现该特定模板。

现在对您的 Controller 进行一些更改

def index(Integer max) {
params.max = Math.min(max ?: 10, 100)

if(params.ddlCountry || params.ddlCity) {
def shops = Shop.withCriteria {
if (params.ddlCountry) {
like('shopCountry', '%${params.ddlCountry}%')
}
if (params.ddlCity) {
like('shopCity', '%${params.ddlCity}%')
}

}
//If request is coming in via ajax load in a template of the actual results so the bit that is within div id='results' should be actually a template.
if (request.xhr) {
render (template: 'myController/index', model:[shopList:shops])
return
}
//This will handle non ajax calls and will load in the index.gsp which includes the site mesh
[shopList:shops]
return
}

//no need for else just use return to stop a if statement in a controller
respond Shop.list(params), model:[shopCount: Shop.count()]
return
}

除了 if if (request.xhr) 告诉 Controller 这是一个 ajax 调用呈现模板 _index.gsp 而不是 index.gsp

这两者之间的区别在于 index.gsp 有 layout="main"这是加载站点样式的站点网格。该模板是普通的,可以重载呈现的现有普通页面的一部分。

关于mysql - g :select using two combobox in grails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com