Хобрук: Ваш путь к мастерству в программировании

Действие Grails работает для запроса GET, возвращает 404 для запроса POST

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

Я создал контроллер под названием 'add' (есть исходный файл AddController.groovy и соответствующее представление add / index.gsp) и определил очень разреженное действие 'process', которое в настоящее время отображает небольшой объем 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.

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

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

Какой фундаментально важный элемент головоломки мне не хватает?

контроллеры / интерфейс / AddController.groovy:

package frontend

class AddController {

    def index = { }

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

просмотров / добавить / 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>
07.02.2011

Ответы:


1

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

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

<g:actionSubmit value="Add" />

to:

<g:actionSubmit value="Add" action="process" />
07.02.2011
  • Сэкономил день ... Наконец-то получил этот ответ, потратив два часа. 30.04.2014
  • Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..