контроллер сопоставлений URL-адресов grails

#url #grails #controller #mapping

#url #grails #контроллер #сопоставление

Вопрос:

В моем приложении — grails 3.0 я пытаюсь вернуть пользовательский URL: /book/showbook/2 Контроллер выполняет два действия:

действие 1 — сбор пользовательской формы и создание книги объектов

действие 2 — отображение информации о созданной книге.

Установлен плагин Spring security.

Проблема: вместо отображения: /book/showbook/2 результатом кнопки отправки является: /book/showbook .

Код сопоставления URL-адресов:

   static mappings = {
            "/book/showbook/$id?(.$format)?"(controller: 'game', action: 'showbook')

            "/$controller/$action?/$id?(.$format)?"{
                constraints {
                }
            }
  

Просмотр кода действия 1:

 <button type="submit" class="btn btn-danger btn-xs" params:[id: ${bookID}]>Submit data</button>
  

Код Action2:

 def showbook(Book book) {
        respond book
    }
  

Ответ №1:

Я не думаю, что вы создаете форму так, как она должна быть. Вы можете прочитать официальный тег формы Grails. http://docs.grails.org/latest/ref/Tags/form.html

Пожалуйста, попробуйте это

 <g:form name="book" action="showbook" id="${bookID}">
    <button type="submit" class="btn btn-danger btn-xs">Submit data</button>
</g:form>
  

Пожалуйста, убедитесь, что ${BookID} определен где-то в вашем gsp или передан из вашего модального в соответствующее представление, иначе это не будет работать.

Комментарии:

1. Я использую форму, но я вставил ее не только для удобства чтения. Я проверю свое объявление формы, если я что-то упустил. Спасибо

2. Да, вы правы, моя ошибка была в форме: <g:form name=»create-new-form» url=»[действие:’showbook’, контроллер:’book’]»>. Он был жестко запрограммирован, что вызывает странное поведение. Спасибо