Grails には素晴らしい組み込みの ajax タグがいくつかありますが、私は JavaScript ライブラリ (つまり jquery) を直接使用することを好みます...
jqueryをダウンロードし、web-app/js/jquery.js にコピーします。
フォーム gsp またはレイアウトの head セクションに次を追加します。
<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>
もちろん、これを実装する方法はたくさんありますが、組み込みの ajaxy 機能のいくつかを使用するよりも jquery を好んでいるだけです。