Grails 有一些很棒的内置 ajax 标签,但我更喜欢直接使用 javascript 库(即 jquery)...
下载jquery并复制到 web-app/js/jquery.js
在表单 gsp 或布局的头部添加:
<g:javascript src="jquery.js"/>
在您的表单 gsp 中,我建议您在用户名的输入字段中添加一个 id 属性,这样可以更轻松地通过 id 引用元素:
<input type="text" name="username" id="username" value=""/>
在您的控制器方法中,您可以检查您的域/服务/等以查看名称是否免费。下面是一个人为的示例,它以 JSON 形式返回响应,但您也可以返回 html 来填充 div,这取决于您希望如何提醒用户。
class UserController {
def checkAvailable = {
def available
if( User.findByUsername(params.id) ) {
available = false
} else {
available = true
}
response.contentType = "application/json"
render """{"available":${available}}"""
}
5,在你的表格gsp的头部添加
<script type="text/javascript">
// wait for dom to load
$(function(){
// set onblur event handler
$("#username").blur(function(){
// if some username was entered - this == #username
if($(this).length > 0) {
// use create link so we don't have to hardcode context
var url = "${createLink(controller:'user', action:'checkAvailable')}"
// async ajax request pass username entered as id parameter
$.getJSON(url, {id:$(this).val()}, function(json){
if(!json.available) {
// highlight field so user knows there's a problem
$("#username").css("border", "1px solid red");
// maybe throw up an alert box
alert("This username is taken");
// populate a hidden div on page and fill and display it..
$("#somehiddendiv").html("This ID is already taken").show();
}
});
}
});
});
</script>
当然有很多方法可以实现这一点,我只是碰巧更喜欢 jquery 而不是使用一些内置的 ajaxy 功能。