提交 Grails 表单都有哪些方便的技巧?
Posted
技术标签:
【中文标题】提交 Grails 表单都有哪些方便的技巧?【英文标题】:What are some handy tricks for submitting Grails forms?提交 Grails 表单有哪些方便的技巧? 【发布时间】:2011-11-29 01:44:19 【问题描述】:每个人都知道通过 html 表单向控制器传递参数:
<g:form action="save">
<g:textField name="text1" />
</g:form>
而且我隐约意识到能够在 Grails 中将这些参数结构化为某种对象表示法:
<g:form action="save">
<g:textField name="text.a" />
<g:textField name="text.b" />
</g:form>
几乎不知道它们在控制器中的结构(对象?哈希图?我记得在后一个示例中必须使用 .value)。
所以我猜这个问题真的是两个问题:
Grails 如何像第二个示例那样处理对象表示法中的参数?你也可以将它们放入数组中吗?
关于表单提交及其参数还有哪些其他技巧可以使具有非常复杂和迭代数据的表单在控制器中易于处理?例如,ATG 允许您将表单字段绑定到 bean 并遍历其整个属性图以找到您需要设置的属性。
【问题讨论】:
【参考方案1】:第二个符号"text.a"
用于消除从属性到域对象的数据转换的歧义。例如,如果您有 2 个域对象,每个对象都有一个属性 "a"
,如果您执行 domObj1.properties = params
和 domObj2.properties = params
,则该值将转到这两个域对象,这可能不是您想要的。所以在你看来你应该有变量 domObj1.a 和 domObj2.a 并且在你的 grails 控制器中你可以使用def domObj1 = new DomObj1(params["domObj1"])
进行实例化
如果您的第二个问题是指是否可以迭代对象,那么您可以很好地使用 $ 包装器中的 GPath 语法,例如查看下面 id 属性中的代码。
<td><g:remoteLink controller="device" action="getDevice" id="$objInstance.prop1.prop2.id" update="propDetail">$fieldValue(bean: objInstance.prop1, field: "prop1")</g:remoteLink></td>
上面的例子还展示了从 grails gsp 提交表单的 ajax 方式。
【讨论】:
以上是关于提交 Grails 表单都有哪些方便的技巧?的主要内容,如果未能解决你的问题,请参考以下文章
Grails、Spring Security 和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交