Действие Grails работает для запроса GET, возвращает 404 для запроса POST - PullRequest
1 голос
/ 07 февраля 2011

Я учусь использовать Grails и столкнулся с ситуацией, которую я не понимаю при передаче того, что должно быть простой отправкой формы.

Я создал контроллер под названием «add» (естьДобавьте исходный файл AddController.groovy и соответствующее представление add / index.gsp) и определили очень разреженное действие «процесс», которое в настоящее время отображает небольшой объем HTML-кода для проверки того, что действие вызывается.

URL-адреспоскольку действие процесса на контроллере добавления (неудивительно) http://localhost:8080/frontend/add/process/.

Я хотел бы представить очень простую форму для действия процесса в качестве первого шага к интеграции с некоторыми существующими библиотеками Java.

Отправка запроса GET на http://localhost:8080/frontend/add/process/ приводит к вызову действия процесса и отображению браузером соответствующего простого содержимого HTML.

Отправка запроса POST на http://localhost:8080/frontend/add/process/ возвращаетошибка HTTP 404.

Я понимаю, что мне не хватает фундаментального дополнения к моему приложению, так что вышеуказанное действие работает с bдругие запросы GET и POST.Я предполагал, что по умолчанию тип запроса не будет иметь значения.

Я был бы очень рад на этом этапе, если бы я мог отправить запрос POST соответствующему действию и получить некоторую разметку только для демонстрации того, что все работает.

Какая основная часть головоломки мне не хватает?

controllers / frontend / AddController.groovy:

package frontend

class AddController {

    def index = { }

    def process = {
        render "<h1>process action being performed</h1>"
    }
}

views / add / index.gsp

<html>
    <head>
        <title>Test View for index action</title>
        <meta name="layout" content="main" />
    </head>
    <body>
    <g:form controller="add" action="process">
        <label for="title">Title:</label>
        <g:textField name="title" id="title" />
        <label for="content">Content:</label>
        <g:textArea name="content" id="content" />
        <g:actionSubmit value="Add" />
    </g:form>
    </body>
</html>

1 Ответ

14 голосов
/ 07 февраля 2011

Директиве <g:actionSubmit /> требуется атрибут action для указания действия, которое необходимо обработать. Я предполагал, что действия с формой будет достаточно.

Мне нужно было изменить:

<g:actionSubmit value="Add" />

до:

<g:actionSubmit value="Add" action="process" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...