Проблемы с отправкой формы с помощью AJAX в Grails 2.0

На моей странице GSP у меня есть такая форма:

<g:form action="ajaxAdd">
  <g:textArea id='postContent' name="content" rows="3" cols="50"/><br/>
  <g:submitToRemote value="Post"
      url="[controller: 'post', action: 'addPostAjax']"
      update="allPosts"
  />            
</g:form>

И на той же странице у меня есть этот div:

<div class="allPosts">
    <g:each in="${user.posts}" var="post">
        <div class="postEntry">
            <div class="postText">
                ${post.content}
            </div>
            <div class="classDate">
                ${post.dateCreated}
            </div>
        </div>
    </g:each>
</div>

Когда я нажимаю кнопку, приложение запускает действие addPostAjax в моем контроллере, но проблема в том, что я не могу понять, как отправить обратно коллекцию user.posts, чтобы заполнить мой allPosts div.

У кого-нибудь есть идея, пожалуйста. Спасибо.


person kbaccouche    schedule 03.02.2012    source источник


Ответы (1)


Чтобы использовать атрибут update в теге submitToRemote, вам необходимо отправить обратно обработанные сообщения.

Сначала создайте div, в котором вы отображаете сообщения пользователей, в шаблон, например. _userPosts.gsp. Замените div на странице тегом render, чтобы использовать шаблон:

<g:render template="userPosts" />

Тогда в вашем контроллере addPostAjax должен выглядеть так:

def addPostAjax() {
    def user = ....

    render template: 'userPosts', model: [user: user], contentType: "text/plain"
}

Другой альтернативой является render user as JSON и написание кода JavaScript для обновления вашей страницы.

person ataylor    schedule 03.02.2012
comment
Спасибо за ответ, я это сделал, и вся обработка внутри контроллера завершена. Но все же div не хочет обновляться - person kbaccouche; 06.02.2012
comment
Атрибут update должен указывать идентификатор div. В вашем примере вам нужно добавить id="allPosts" вместо или в дополнение к class="allPosts". - person ataylor; 06.02.2012