0

我正在使用springsourcetoolsuite,grails项目,并且遇到了将在文本字段中输入的值存储到在mysql中创建并连接到grails的数据库中的表中的问题。现在我有一个名为属性的域类,其中包含变量地址、城市、邮政编码、国家等,它们也是 mysql 数据库中表属性的字段。当我要求用户使用这段代码填写时-(gsp视图)

<body>
<g:textField name="address" maxlength="40" value="${propertyInstance?.address}" />
</body>

它可以工作,并且值存储在数据库中。但是,我需要在每次单击按钮时附加一个输入字段,因此我将此输入字段放在一个名为 add() 的函数中。这是代码-

<head>
<script type="text/javascript">
function add() {
    var newP = document.createElement("p");
    var input1,
    area = document.getElementsByTagName("form")[0];
    input1 = document.createElement("input");
    input1.type = "g:textField";
    input1.placeholder = "street";
    input1.value = "${propertyInstance?.address}";
    newP.appendChild(input1);
    area.appendChild(newP);
}
</script>
</head>
<body>
<g:form name='prop' method="post" action="save">
<input type="button"  value="+Add" onclick= "add();" ><br>
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</g:form>
</body>

现在,当我执行此操作并运行它时,它采用空值并打印一条错误消息“地址不能为空”。现在我看不出有什么问题,但如果有人熟悉 groovy/javscript .. 请帮我找出问题所在。非常感谢。

4

1 回答 1

2

我猜你首先没有使用脚手架功能来生成你的视图。如果你没有,这是开始了解 grails 基础知识的好方法。具体而言,您需要将要传递给控制器​​的字段(如地址)放在表单标签内。喜欢:

<body>
    <g:form name='prop' method="post" action="save">
        <g:textField name="address" maxlength="40" value="${propertyInstance?.address}" />
        <input type="button"  value="+Add" onclick= "add();" ><br>
        <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
    </g:form>
</body>

另一件事是您不能创建标签输入并将其类型设置为“g:textfield”。html 输入字段只有有限的类型。在这种情况下,您要使用的实际上是“文本”。在任何情况下,grails 的标签都在 javascript 之前呈现(在服务器端),而 javascript 代码在客户端呈现。因此,第一次呈现页面时,它们将起作用。但是要在页面中动态插入内容,您需要ajax,因为 grails 的标签已经呈现。该值${propertyInstance?.address}需要在服务器上处理,返回并在您的字段中建立。因此,您需要发出异步请求。无论如何, JQuery是你的人。此外,对于您正在做的事情,JQuery 有助于操作 HTML DOM,这将使您的工作更加轻松。

于 2012-07-13T14:07:29.700 回答