Grails - 如何在更改select后更新GSP?

3
我已经编写了一个域类,并生成了控制器和视图。我稍微修改了list.gsp和list action。为了过滤显示内容,我在页面上放置了一个g:select标签。
每当选择中的值发生变化时,列表控制器会再次触发并过滤返回的数据实例。这个过程非常顺利。
问题是我无法显示更改后的实例;我所知道的更新GSP的唯一方法是执行window.location.reload(),但这将导致页面重新初始化。所以一切都回到默认状态。
因此,问题是:如何使我的GSP获取更改后的实例数据并显示出来?
例如,其中之一的选择。返回的实例经过选择的月份和年份变量进行了过滤。
        <g:select id="monthSelection" from="${['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']}" value="${inputYear}" onchange="${remoteFunction(
        action:'list', 
        params:'\'selectedYear=\' + escape(yearSelection.value) +\'&selectedMonth=\' + escape(this.value)'
        )}"
        "/>

谢谢!

2个回答

4
听起来你需要做以下两件事之一:
  1. 在选择月份时重新加载整个页面(将所选月份作为参数传递),或者
  2. 更改你的 remoteFunction 方法,使其返回一个模板视图,并设置 remoteFunction 调用上的 update 参数以指定页面上哪个 div 应该用从返回的视图中获取的内容进行动态更新。
我已经在多个需要 ajax 更新的情况下使用了第二种方法,并且效果很好。

@Robin:我同意使用ajax调用(选项2)是更合适的选择,因为你使用了remoteFunction(http://www.grails.org/Tag+-+remoteFunction)。 - Hoàng Long

3
尝试像这样使用:

试试下面的方法:

    <g:select id="monthSelection" from="${['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']}" value="${inputYear}" onchange="${remoteFunction(
            action:'list', 
            params:'\'selectedYear=\' + escape(yearSelection.value) +\'&selectedMonth=\' + escape(this.value)',
            update : 'divId'
)}"/>

在进行带有列表操作的ajax调用后,'divId'应包含您需要更新的HTML部分。

例如:

<div id='divId'>
.....
....
</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接