actionSubmit

用途

创建一个提交到指定action的按钮.在一个form表单里,允许有多个提交按钮.使用时 Javascript 脚本时象在HTML 的使用一样.

示例

<g:actionSubmit value="Update" />
<!--'Update' is action, label is 'Some update label'-->
<g:actionSubmit value="Some update label" action="Update" /> 
<!--label derived from message bundle-->
<g:actionSubmit value="${message(code:'label.update')}" action="Update" /> 
<g:actionSubmit value="Delete" />
<g:actionSubmit value="DeleteAll" onclick="return confirm('Are you sure???')" />

描述

属性

在一个form里,使用一个常规的提交按钮时,form自己决定请求的URL,被请求URL的action被执行. 然而,这个标签会覆盖常规按钮的行为,来确定哪个action会被执行. 值得注意的是,仍然是form决定了控制器.

如果不是必需,在form里的action不被指定,标签将会按预期设定的工作. URL 在浏览器的地址很可能包括在form里指定的action名称,不是被指定的 actionSubmit 标签.在这种情况下,使用自定义的 URL mappings是一个好主意.

URL Mappings

actionSubmit 标签的执行意味着这不是一个好方法与URL映射,尤其是在默认时. 因为 URL 映射影响请求的URL, actionSubmit可以使用一个参数去指定执行哪个aciton. 这意味着,在URL mapping 和要执行的action之间匹配错误. 用一个简单的例子,URL的映射在默认情况下的例子:

class UrlMappings {
    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here
            }2
        }
    }
}

和一个包括一个简单form表单的 GSP 页:

<g:form controller="test">
  <g:actionSubmit value="Submit" action="success"/>
</g:form>

URL 生成一个 提交到".../test" 或 ".../test/index" (假设 "index" 是一个默认的action)<form> 元素 ,这将取决于 Grails的版本. 注意的是,当点击提交按钮时,在URL里既不包含 "success"信息, 也不会在浏览器上提示"success"的信息.

form表单请求的URL中不包含action的名称,不过这不是一个太大的问题.如果你有一个可添加默认action的 Grails 版本, 你可以指定一个action在 <g:form> 标签中, 然后你可用一个自定义的URL mapping 隐藏action的名称:

"/test/submit" {
       controller = "test"
       action = "index"
   }

在 mapping 指定的action,不是默认的action/controller, 就是在 <g:form> 标签里指定的.

注意的是,这个标签依靠多解析器,检查多个请求里的参数. 在 Config.groovy里,把 grails.disableCommonsMultipart 设为true, actionSubmit 失效.

来源

Show Source