我正在为大型数据集构建一个grails应用程序,并且由于在我的应用程序的javascript端(客户端)加载一个大的json文件而面临各种问题,导致浏览器崩溃。
现在,我已经意识到我只在javascript端进行所有用户选择,但我假设它也可以在grails控制器端使用标签和“params”完成
我在看:
http://grails.org/doc/latest/ref/Tags/link.html
http://grails.org/doc/latest/ref/Tags/form.html
但是,我对此非常陌生,如果我想做的事情是否可行,需要一些指导? 基本上,我希望用户选择一堆下拉列表,其值传递给我的grails控制器,控制器将过滤后的数据发送到javascript加载,这样只有相关数据才会发送到浏览器并运行正常。
更新
package marchmock2
class Tablev1class {
Date date_hour
String mv
String pagetype
Integer visits
Integer visits_ly
Integer visits_lw
String time_period
String platform
String device
String browser
static mapping = {
table "pgtyp"
version false
date_hour column: "date_hour"
mv column: "mv"
pagetype column: "pagetype"
visits column: "visits"
visits_ly column:"visits_ly"
visits_lw column:"visits_lw"
time_period column:"time_period"
platform column:"platform"
device column:"device"
browser column:"browser"
}
static constraints = {
}
}
这是我的域类的样子,没有依赖。我想要的是从各种mv,pagetype,平台,设备,浏览器创建选择,并使选择传递给控制器,该控制器有对数据库的查询
答案 0 :(得分:0)
我认为您可能需要编辑问题并在上一部分重新定义您的要求。
你可以看看这里:
I want my selects dropdowns to auto populate with Ajax in Grails website
在这个问题上,我有点分析了如何使用远程调用从一个字段收集数据以生成下一个选择?是这部分要求还是这些所有单一选择都没有相互依赖?
如果依赖关系相关的选择然后采取ajaxdependancyselection插件,可以实现正确的嵌套选择。如果选择来自大数据集,那么关于主要问题的建议可能会更快.......
<强>更新强> 由于它们是独立的,您可以加载
<g:select name="input1" from="${domainClass1.list()}" ...>
每个domainClass调用将其发回给您的控制器
在您的控制器中
def d1=domainClass1.get(params.input1)
def d2=domainClass2.get(params.input2)
render (view: 'something', model: [ d1: d1, d2:d2 ] )
等等 那么你可以扩展每个传递的domainClass对象,并从每个d1 d2等中获取特定的相关元素....
我真的不确定客观,如果它不是你想要的那么道歉
更新更新
不确定为什么你需要为每个对象进行选择,也许正如你所说,你想要对这些值做一些事情。 在这种情况下,查看最后一个示例,optionKey和optionValue都设置为设备,因此它将在选择中显示设备,用户选择将最终成为实际的设备选择
<g:select id="mv" name="mvid" from="${marchmock2.Tablev1class.list()}" optionKey="id" optionKey="mv" required="" value="${params?.mvid}" class="many-to-one"/>
<g:select id="mv" name="mvid" from="${marchmock2.Tablev1class.list()}" optionKey="id" optionKey="pagetype" required="" value="${params?.mvid}" class="many-to-one"/>
<g:select id="mv" name="mvid" from="${marchmock2.Tablev1class.list()}" optionKey="id" optionKey="platform" required="" value="${params?.mvid}" class="many-to-one"/>
<g:select id="mv" name="mvid" from="${marchmock2.Tablev1class.list()}" optionKey="device" optionKey="device" required="" value="${params?.mvid}" class="many-to-one"/>
现在扩展这个
<g:select id="mv" name="mvid" from="${marchmock2.Tablev1class.list()}" optionKey="device" optionKey="device" required="" value="${params?.mvid}" class="many-to-one" onchange="${remoteFunction (
controller: 'someController',
action: 'someAction',
params: "'device=' + this.value",
update: 'newDivId'
)}"/>
<div id="newDivId">
<!-- your output from when user selects something from above will end up showing the result from the someController/someAction?device={selected} will be repesented in here -->
</div>