如何存储在数据库的输入文本字段中输入的值

时间:2012-07-13 12:56:02

标签: javascript grails groovy

我正在使用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 ..请帮我弄清楚什么是错的。 非常感谢。

1 个答案:

答案 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,这将使您的工作变得更加容易。