我正在使用springsourcetoolsuite,grails项目,我遇到了将在textfield中输入的值存储到mysql中创建并连接到grails的数据库中的表的问题。现在我有一个名为property的域类,其中包含变量address,city, zipcode,country等,它们也是mysql数据库中table属性的字段。 当我要求用户使用这段代码填写时 - (gsp views)
<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>
现在,当我执行此操作并运行它时,它将采用null值并输出错误,指出'address not not null'。现在我看不出有什么问题,但如果有人熟悉groovy / javscript ..请帮我弄清楚什么是错的。 非常感谢。
答案 0 :(得分:2)
我猜你没有使用scaffolding功能来首先生成你的观点。如果你没有,这是一个很好的方式来开始了解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,这将使您的工作变得更加容易。