Граали форма не представляется
Вот мой контроллер 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 ответа:
Попробуйте с:
<g:actionSubmit action="execute" value="Create" />
Если вы укажете только значение для
g:actionSubmit
, он создаст кнопку с этой меткой, а также перенаправит на действие, основанное на этом значении. Если имя действия отличается от метки кнопки, необходимо указать атрибутыaction
иvalue
. Взгляните на документацию .Обратите внимание, что если вы используете
g:actionSubmit
, то атрибут действияg:form
будет проигнорирован (который вы указали кстати.). Вы найдете дополнительную информацию, где это может быть полезно, в документах, связанных выше.