2009-09-17 10 views
6

私はSpringフォームを使用して動的フォームを作成しようとしています。基本的に、このフォームには学習活動のタイトルがついています。その下には「学習活動をもう1つ追加する」というボタンがあります。これにより、ユーザーはもう1つの学習活動を追加することができます。私は彼が好きなだけ追加することができるようにしたい。Springの動的フォーム

私はこれまでにこれを試したことがないので、私が考えた最初の解決策でエラーが発生しました。

<script language="javascript"> 
fields = 0; 
function addInput() { 
     document.getElementById('text').innerHTML += "<form:input path='activity[fields++].activity'/><br />"; 
} 

<div id="text"> 
    <form:form commandName="course"> 
    Learning Activity 1 
    <form:input path="activity[0].activity"/> 
    <input type="button" value="add activity" onclick="addInput()"/> 
    <br/><br/> 
    <input type="submit"/> 
    </form:form> 
    <br/><br/> 
</div> 

答えて

7

< form:input>はjavascript内で使用できません。これは、サーバー側で実行されるjspタグです。

しかし、HTML入力がSpringコマンドオブジェクトのフィールドにどのようにバインドされるかについては何も驚くことはありません。それはちょうど名前に基づいています。あなたのjavascriptで、新しい <input type="text" name="activity[1].activity"> を追加します(たとえば、明らかにインデックスを増やします)。

もっと複雑なコントロールに使用したもう1つのオプションは、既存のコントロール(Springフォーム:inputタグを使用して作成されたもの)のHTMLを取得し、クローンしてインデックスを増やした番号に置き換えます。 jQueryを使用すると、これはもっと簡単になります。

編集対象: 問題が発生する可能性がある1つの問題:外部入力欄(「テキスト」)の末尾に新しい入力ボックスを追加しています。つまり、フォームタグ内にはありません。それは動作しません。

+0

私はこれをやってみましたが、生成されたフォームの値はコマンドクラスに束縛されていません。上記のコードでは、 Jeune

+0

"問題を引き起こす可能性がある1つの問題:あなたの外側div( "text")の末尾に新しい入力ボックスがあります。これはフォームタグ内にないことを意味します。 私はこれを既に取り上げていましたが、フォームタグ内の別のdiv内に新しい入力ボックスを追加しましたが、追加された入力ボックスはバインドされません。 – Jeune

+1

追加した入力ボックスの例を挙げることはできますか?私はこのアプローチを使ってこれを正確に実行しています。 "activity [1] .activity"という名前の入力ボックスは、( "activity"フィールドがあると仮定して)アクティビティリストの2番目のアイテムにバインドする必要があります。 –

1

<form:input> JSPタグです:私は本当に私は、エラーが発生します何をしたかやって気持ちを持っていたが、ちょうど私が何をしようとしていますどのような家庭ドライブか、ここのコードですか?もしそうなら、サーバサイドのJSPエンジンはそれらを解釈していないので、DOMに<form:input>ノードを追加するクライアントサイドのJavascriptは効果がありません。

あなたのJavaScriptは生のHTMLとDOMで動作する必要があります(<input>要素の追加など)。

+0

はい、これはSpring用のjspタグです。私は、リクエストから直接パラメータを取得するだけで、すでにフォームをブルートフォースすることを考えました。しかし、SpringのSimpleFormController機能を使用して、フォームフィールドをコマンドクラスにバインドしたかったのです。 私の状況でそれを行う方法があるのか​​どうか疑問に思っていました。 乾杯! – Jeune