我觉得我已经进入了暮光之城。我有一个重定向到URL的Grails表单,但是给出了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(通过关注浏览器位置栏并按Enter键),页面渲染就好了,虽然表单参数丢失,因为它现在只是一个GET。我也尝试将表单方法更改为GET,但这也不起作用(抛出404)。
我之前完成过几十次类似的表格,没有任何问题。我确定这是一个愚蠢的用户错误,但我真的无法弄清楚出了什么问题。
感谢您的任何想法!
答案 0 :(得分:1)
所以,我终于开始从表单中删除部分并发现由于某种原因你不能用“action”这个词命名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" />
现在一切正常。
我的生命耗费了五个小时。
但我想我必须原谅Grails,因为它通常每天都会节省我的费用。 :O)