2009-09-17 21 views
6

Yay formlarını kullanarak dinamik bir form oluşturmaya çalışıyorum. Temel olarak, form bir öğrenme aktivitesi başlığı alır ve ardından "Bir Öğrenme Aktivitesi Ekleme" yazan aşağıdan bir düğme vardır. Bu, kullanıcının bir tane daha öğrenim aktivitesi eklemesini mümkün kılar. Onun istediği kadar ekleyebilmesini istiyorum.İlkbaharda Dinamik Formlar

Bunu daha önce denemedim ki, düşündüğüm ilk çözümle hatalarla karşılaştım.

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

cevap

7

Sunucu tarafında çalışan bir jsp etiketi olduğundan, javascript içinde < form:input> kullanamazsınız. Bununla birlikte, bir HTML girişinin Spring komut nesnesindeki bir alana nasıl bağlandığı konusunda büyülü hiçbir şey yoktur; Sadece isme dayanıyor. Yani javascript'inizde, yeni bir <input type="text" name="activity[1].activity"> 'u ekleyin (örneğin - endeksi artırırsınız).

Daha karmaşık denetimler için kullandığım bir diğer seçenek, varolan denetimin HTML kodunu (Spring form: input tag kullanılarak oluşturulmuş) almak ve klonları, artan sayılarla değiştirerek klonlamaktır. JQuery'yi kullanırsanız bu çok daha kolay olur.

REDAKTE EKLEMEK: problemlere neden olabilir Bir sorunu: Eğer Form etiketlerinin içinde değil demektir sizin dış div ("metin"), sonuna yeni giriş kutusuna ekliyorsanız. Bu işe yaramaz.

+0

Bunu yapmayı denedim, ancak oluşturulan formların değerleri komut sınıfına bağlı değil. Yay formunda yalnızca belirttiğim yalnızca şu şekilde bağlanır: ör. Yukarıdaki kodda: Jeune

+0

"Sorununuza neden olabilecek bir sorun: Dış etiketinizin ("metin") sonuna yeni giriş kutusu, yani form etiketlerinin içinde değil demektir. Bu işe yaramaz. " Bunu zaten çözdüm, form etiketlerindeki başka bir div içindeki yeni giriş kutularını ekledim, ekli giriş kutuları hala eklenmiyor. – Jeune

+1

Ekli giriş kutunuzun bir örneğini verebilir misiniz? Tam olarak bunu yapmak için bu yaklaşımı kullandım ve işe yarıyor. "Aktivite [1] .activity" adlı bir giriş kutusu, aktivite listenizdeki ikinci öğeye bağlanmalıdır (bir "etkinlik" alanı vardır), vb.) –

1

<form:input> bir JSP etiketi mı: Gerçekten ben bir hata üretecektir yaptığını yapıyor bir his vardı ama bu yapmam ne çalışıyorum eve do, burada kod? Öyleyse, sunucu tarafındaki JSP motoru bunları yorumlamadığından, DOM için <form:input> düğümleri eklemek için istemci tarafı Javascript'in hiçbir etkisi olmayacaktır.

Javascript'iniz, <input> öğesinin eklenmesi gibi ham HTML ve DOM ile çalışmalıdır.

+0

Evet, Spring için bir jsp etiketi. Sadece formları doğrudan istek üzerine almakla formları kaba bir şekilde zorlamayı düşündüm. Ancak, form alanlarını bir komut sınıfına bağlamak için Spring'in SimpleFormController yeteneğini kullanmak istedim. Sadece durumumda yapmanın bir yolu olup olmadığını merak ediyordum. Şerefe! – Jeune