gpt4 book ai didi

grails - 填充Grails g:从函数中选择

转载 作者:行者123 更新时间:2023-12-02 15:34:25 25 4
gpt4 key购买 nike

尝试从 Controller 中的函数填充g:select,这可能吗?

目前,我们有:

def run(Long id) {

def reportInstance = Report.get(id)

def listPromptValues = populatePrompts(reportInstance)*.values()

if (!reportInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'report.label', default: 'Report'), id])
return
}
[reportInstance: reportInstance, listPromptValues: listPromptValues]
}

def populatePrompts(Report rp){
//for each prompt in the report, go out and get it's values
rp.prompts.collectMany {
reportService.listDatatypeValues(it.datatype)
}

}

然后g:select就是
<li class="fieldcontain">
<g:each var="prompt" in="${reportInstance.prompts}">
<span id="prompts-label" class="property-label">
<g:message code="report.prompts.label" default="${prompt.name}:" />
</span>
<g:if test="${prompt.datatype.type == 'DropDown'}">
<g:select id="prompt.name" from="${listPromptValues}" name="prompt.name" value="" noSelection="['':'']"/>
<br>
</g:if>
</g:each>
</li>

如果只有一个提示,则效果很好,但是,如果循环中有多个提示,我们需要能够直接从gsp View 中调用populatePrompt函数,可能会发送reportId,然后取回listPromptValues。我似乎无法正常工作onChange(remoteFunction ...),并且空手而归搜索大量Google网站。

诸如createLink的工作原理
${createLink(controller:'report', action:'runReport', id:"${reportInstance.id}")}

但是,它不是selectLink,而是select标记的from属性,例如:
<g:select id="prompt.name" from="{(controller:'report',action:'populatePrompt', id:"${reportInstance.id}")}" name="prompt.name" value="" noSelection="['':'']"/>

有什么想法或方向吗?

最佳答案

我认为@JamesKleeh在他的最后评论中提出了一个可行的解决方案。

鉴于您的gsp结构是完全静态的,因此获取要动态加载的提示选择选项没有任何意义。只需从 Controller 的listPromptValues中的List包中返回这些选项,然后将其直接放入gsp中即可。

关于像[prompt1: ['a','b','c'], prompt2: ['d','e','f']]这样的参数,您可以在populatePrompts方法中获取此映射,并将每个键值对放入gsp select标记中。像这样:

Controller

{    ....
def listPromptValues = populatePrompts(reportInstance)
....
}

def populatePrompts(Report rp){
//for each prompt in the report, go out and get it's values
def promptMap = [:] //map to be returned
rp.prompts.each {
promptMap.put(it.name, reportService.listDatatypeValues(it.datatype))
}
return promptMap
}

gsp
                <g:each var="prompt" in="${reportInstance.prompts}">
<span id="prompts-label" class="property-label">
<g:message code="report.prompts.label" default="${prompt.name}:" />
</span>
<g:if test="${prompt.datatype.type == 'DropDown'}">
<g:select id="prompt.name" from="${listPromptValues[prompt.name]}" name="prompt.name" value="" noSelection="['':'']"/>
<br>
</g:if>
</g:each>

关于grails - 填充Grails g:从函数中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075511/

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