0

私はspringsourcetoolsuite、grailsプロジェクトを使用していますが、テキストフィールドに入力された値をmysqlで作成され、grailsに接続されたデータベースのテーブルに格納するというこの問題に遭遇しています。これで、プロパティというドメインクラスがあり、変数address、city、zipcode、countryなどがあります。これらは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>

これを実行して実行すると、null値が取得され、「アドレスをnullにすることはできません」というエラーが出力されます。今、私は何が悪いのかわかりませんが、誰かがgroovy / javscriptに精通しているなら、私が何が悪いのかを理解するのを手伝ってください。どうもありがとう。

4

1 に答える 1

2

そもそもビューを生成するために足場機能を使用しなかったと思います。そうでない場合は、グライルの基本を理解し始めるのに良い方法です。具体的には、コントローラーに渡すフィールド(アドレスなど)をフォームタグ内に配置する必要があります。好き:

<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>

もう1つは、タグ入力を作成してそのタイプを「g:textfield」として配置することはできないということです。html入力フィールドのタイプは限られています。この場合に使用したいのは、実際には「テキスト」です。いずれの場合も、Grailsのタグは(サーバー側で)javascriptの前にレンダリングされ、javascriptコードはクライアント側でレンダリングされます。したがって、ページが最初にレンダリングされるとき、それらは機能します。ただし、ページに動的に何かを挿入するには、grailsのタグが既にレンダリングされているため、ajaxが必要です。${propertyInstance?.address}はサーバーで処理され、フィールドで返され、確立される必要があります。したがって、非同期リクエストを行う必要があります。とにかくJQueryはあなたの男です。また、JQueryは、HTML DOMを操作するのに役立ちます。これにより、作業が非常に簡単になります。

于 2012-07-13T14:07:29.700 に答える