Grailsを初めて使用し、g:formRemoteコマンドで問題が発生しました。
ag:textAreaボックスがコントローラーにメッセージを送信し、このメッセージを保存したい。その後、formRemote Ajaxを介してページを更新し、メッセージがページに表示されるようにする必要があります。
ただし、ページを更新する代わりに、formRemote呼び出しは、指定されたURLが実際のリンクであると想定し、この(存在しない).jspサイトにリダイレクトするように要求します。
開始したいメソッドがコントローラーで呼び出されます
同様の問題で提供されている多くの解決策を試しましたが、この問題は彼らの問題とは異なるようです
コードは次のとおりです。
<div id="history">
<g:render template="posts" collection="${ messages }" var="message" />
</div>
<div class="postMessageForm">
<g:formRemote name="postChatMessage" url="[controller: 'meetingRoom',
action: 'postMessage']" update="history">
<div class="msg_box">
<g:textArea name="message" value="" style="width: 630px"/><br/>
</div>
<div style="float: right;">
<g:submitButton name="Send" style="width: 90px; height: 40px;"/>
</div>
</g:formRemote>
</div>
これは、MeetingRoomControllerで呼び出されるアクションです。
def postMessage() {
if (params.message != "") {
def thisUser = lookUpUser()
def thisRoom = thisUser.joinedRoom
def chatPost = new ChatPost(
message: params.message,
author: thisUser
)
thisRoom.addToChatHistory(chatPost)
}
// def messages = currentChatHistory()
// render template: 'posts', collection: messages, var: 'message'
この種のアプローチは、JeffBrownsのTwitterチュートリアルで見ました。
私が見ている可能性のある失敗:
- コメントアウトされたrendertemplateコマンドは、Ajaxと関係があります(コメントしない場合、発生するのは、テンプレートの投稿がリダイレクトされたページにレンダリングされることだけです。
- AjaxとjQueryの両方の使用法(しかし、私はg:とgroovyのものを使用したばかりで、jQuery libをインポートしていないので、それがポイントになるとは思わない)
- これはremoteFunctionを使用すると簡単になる可能性があります(この場合、remoteFunctionを機能させる方法がわかりません)
この情報が私が欠けているものを誰かに見せるのに十分であることを願っています