Граали форма не представляется


Вот мой контроллер Grails (2.3.6):

class WidgetController {
    def index() {
        render(
            view: "createNew", 
            model:[
            ]
        )
    }

    def execute() {
        println "Executing form submission!"
        redirect(action: "listAll")
    }

    def listAll() {
        // Does some stuff
    }
}

URL-адрес index, скажем, http://localhost:8080/myapp/widget. Идея заключается в том, что когда кто-то переходит на этот URL-адрес, он получает HTML-форму. Когда они заполняют форму, они отправляются (на стороне сервера) в метод execute(), который выполняет некоторые тяжелые задачи, а затем перенаправляет их в метод listAll(), который выполняет некоторые заключительные задачи и отображает веб-страницу для их просмотра.

Вот HTML-форма на createNew.gsp (выводится из index() метод:

<g:form name="create-new-form" url="[action:'execute',controller:'widget']">
    <table class="pure-table pure-table-bordered">
        <tr>
            <td class="row-header">Fizz:</td>
            <td><g:textField id="app-fizz" name="fizz" /></td>
        </tr>
        <tr>
            <td class="row-header">Buzz:</td>
            <td><g:textField id="app-buzz" name="buzz" /></td>
        </tr>
    </table>
    <g:actionSubmit value="Create" />
</g:form>

Когда я перехожу на этот URL и отправляю форму (нажав кнопкуCreate ), я перенаправляюсь на http://localhost/myapp/widget/execute, которая отображает одну из моих настраиваемых страниц ошибок (в основном " Извините, эта страница недоступна"-тип ошибки.

Дополнительно, в выходных данных журнала, Мое println заявление "выполнение формы представления! " не стреляет. Это говорит мне, что у меня что-то неправильно подключено: Grails пытается перенаправить на URL /execute, но почему-то не связывание этого URL-адреса с методом моего контроллера execute(). Идеи?

2 2

2 ответа:

Попробуйте с:

<g:actionSubmit action="execute" value="Create" />

Если вы укажете только значение для g:actionSubmit, он создаст кнопку с этой меткой, а также перенаправит на действие, основанное на этом значении. Если имя действия отличается от метки кнопки, необходимо указать атрибуты action и value. Взгляните на документацию .

Обратите внимание, что если вы используете g:actionSubmit, то атрибут действия g:form будет проигнорирован (который вы указали кстати.). Вы найдете дополнительную информацию, где это может быть полезно, в документах, связанных выше.

Используйте обычный <input type="submit" value="go"/>. таким образом, форма передается в URI, определенный в теге <g:form>

g.actionSubmit или g.submitButton необходимы, если вы хотите отправить свою форму куда-то еще.