редирект формы grails дает 404, но отображение URL работает - PullRequest
1 голос
/ 22 марта 2012

Я чувствую, что вошел в Сумеречную Зону. У меня есть форма Grails, которая перенаправляет на URL-адрес, но выдает 404. Если я перехожу непосредственно к этому точному URL-адресу, все работает нормально (то есть сопоставления URL-адресов правильные).

Это пример сгенерированного тега формы:

<form action="/alm/contactRefresh/itemRefreshProcess/7070" method="post">

При отправке перенаправляет на:

http://localhost:8080/alm/contactRefresh/itemRefreshProcess/7070

Но выдает эту ошибку:

HTTP ERROR 404
Problem accessing /alm/contactRefresh/itemRefreshProcess/7070. Reason:
NOT_FOUND
Powered by Jetty://

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

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

Спасибо за любые идеи!

1 Ответ

1 голос
/ 22 марта 2012

Итак, я наконец начал вырывать части из формы и обнаружил, что по какой-то причине вы не можете назвать флажок Grails, начинающийся со слова «действие». Это должно быть что-то, связанное с записью params ["action"] по умолчанию. Хотя мои имена флажков были объединением "action_" + id.

В любом случае, была какая-то предварительная обработка параметров формы флажка, которые взрывались перед тем, как попасть в контроллер, и каким-то образом переводились в 404 вместо фактического исключения.

Первоначально у меня было это:

<g:checkBox name="action_${serviceRefreshAction.id}" value="${true}" />

Что делает это:

<input type="hidden" name="_action_7196" /><input type="checkbox" name="action_7196" checked="checked" id="action_7196"  />

Я изменил «действие» на «myAction», например:

<g:checkBox name="myAction_${serviceRefreshAction.id}" value="${true}" />

Что делает это:

<input type="hidden" name="_myAction_7206" /><input type="checkbox" name="myAction_7206" checked="checked" id="myAction_7206"  />

А теперь все отлично работает.

Пять часов моей жизни на ветер.

Но я полагаю, что должен простить Грааля, потому что все это спасает меня ежедневно. : О)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...