Grails中要使用ajax技术,除了使用它提供的 remoteLink、formRemote和submitToRemote这几个由Grails提供的ajax功能外,也可以来点更直接的,下面就是例子:
在head部分,增加一行:
<g:javascript library="prototype" />
在文件中增加脚本函数的定义:
<script type="text/javascript">
function activetsc() {
document.getElementById("idtsc").checked=true //使得idtsc的选项被选择,这个与本主题无关。
}
function activedepart(obj,mypath) { //第一个参数是调用的元素本身,第二个为路径
document.getElementById("iddepart").checked=true //使iddepart被选择
var aass=mypath + '?checkdepart=' + obj.selectedIndex //checkdepart是参数名这里只能传数值,中文还是有问题。
new Ajax.Updater('iduser',aass,
{asynchronous:true,evalScripts:true}); //调用 aass 的网址,更新iduser的内容(使用render就行)
return false;
}
</script>
在网页中,使用onchange事件调用刚才定义的函数
<select name="department" onchange="activedepart(this,'${createLink(action:/changedepart/)}')">
...
</select>
在这里,将changedepart这个action用createLink函数转换为连接,一般形式是 /程序名/域名/action名 ,但如果使用 absolute 参数,调试没有问题,部署就会出错。
例如如果改成 createLink(action:/changedepart/,absolute:/true/),部署时竟然返回:
http://changeme/xxx/xxx/changdepart 。对出现changeme真是无语。
在changedepart action中,用render输出内容,替换原来iduser的元素,风格应尽量与iduser相同。在该action中,可以用params.checkdepart来读出参数内容,也就是那个obj.selectedIndex,但注意此时类型已变为字符串,要做转换才能当成数值。