我需要在grails中创建一个动态表单,它在运行时具有各种动态创建的输入框,然后将其参数提交给控制器,就像在编译时创建的表单一样。有什么想法吗?
视图gsp可能如下所示:
<g:form controller="report" action="view">
<input type="submit" value="Submit">
<!-- insert some inuput params here at runtime -->
</g:form>
并且动作控制器将是:
class ReportController {
def view = {
def someDynamicParam = "someParam"
if (params["someParam"] != null) {
...
}
问题是我不知道如何以一种grails在提交时理解它们的方式呈现表单输入字段。
答案 0 :(得分:1)
要创建动态输入,您需要JavaScript。我建议你使用一些框架来简化它。以JQuery为例:
$('<input>').attr({
type: 'text',
id: 'foo',
name: 'foo'
}).appendTo('form');
然后你需要考虑如何将它绑定到域类。看看你的问题我看不到你需要什么,但让我们举一个用户可以设置值的例子:
//domain class
class MyDomainClass {
String value
}
//javascript to add a new value
$('<input>').attr({
type: 'text',
name: 'values'
}).appendTo('form');
//controller submit action
class MyController {
def save() {
def values = params.list('values') //get the list of values
values.each {
MyDomain instance = new MyDomain(value: it)
instance.save()
}
}
}
此处的关键是在html中使用相同的name
,并使用params.list()
转换列表中的提交值。
答案 1 :(得分:1)
我会做像
这样的事情<g:form controller="report" action="view">
<input type="submit" value="Submit">
<g:if test="${checkIfParamsExists}">
<input type="text" id="newParamName"/>
</g:if>
</g:form>
在控制器方面,您的代码应该可以正常工作。