2013-03-04 101 views
0

我使用Spring 3 MVC(3.0.1發佈)。我有一個bean類Customer和一個CustomerForm類,如下所示。無法使用表單提交表單數據:輸入

public class Contact { 
private String firstname; 
private String lastname; 
private String email; 
private String phone; 
    //getters and setters 
} 

public class ContactForm { 
private List<Contact> contacts; 
    //getters and setters 
} 

從春天控制器我填充觸點和設置如下所示

private static List<Contact> contacts = new ArrayList<Contact>(); 

static { 
    contacts.add(new Contact("Barack", "Obama", "[email protected]", "147-852-965")); 
    contacts.add(new Contact("George", "Bush", "[email protected]", "785-985-652")); 
    contacts.add(new Contact("Bill", "Clinton", "[email protected]", "236-587-412")); 
    contacts.add(new Contact("Ronald", "Reagan", "[email protected]", "369-852-452")); 
} 

@RequestMapping(value = "/get", method = RequestMethod.GET) 
public ModelAndView get() { 

    ContactForm contactForm = new ContactForm(); 
    contactForm.setContacts(contacts); 

    return new ModelAndView("add_contact" , "contactForm", contactForm); 
} 

在JSP我顯示它如以下爲可編輯的形式,它建模,

<form:form method="post" action="save.html" modelAttribute="contactForm"> 
<table> 
<tr> 
    <th>No.</th> 
    <th>Name</th> 
    <th>Lastname</th> 
    <th>Email</th> 
    <th>Phone</th> 
</tr> 
<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status"> 
    <tr> 
     <td align="center">${status.count}</td> 
     <td><form:input path="contacts[${status.index}].firstname"/></td> 
     <td><form:input path="contacts[${status.index}].lastname"/></td> 
     <td><form:input path="contacts[${status.index}].email" /></td> 
     <td><form:input path="contacts[${status.index}].phone"/></td> 
    </tr> 
</c:forEach> 
    </table>  
    <br/> 
    <input type="submit" value="Save" /> 
</form:form> 

如果我對聯繫人進行修改並提交,則值不會設置爲模型。但是,如果我使用如下所示的純HTML輸入標記,而不是使用Spring JSTL,則值將設置爲模型。

<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status"> 
    <tr> 
     <td align="center">${status.count}</td> 
     <td><input name="contacts[${status.index}].firstname" value="${contact.firstname}"/></td> 
     <td><input name="contacts[${status.index}].lastname" value="${contact.lastname}"/></td> 
     <td><input name="contacts[${status.index}].email" value="${contact.email}"/></td> 
     <td><input name="contacts[${status.index}].phone" value="${contact.phone}"/></td> 
    </tr> 
</c:forEach> 

當我檢查從瀏覽器中呈現的JSP的HTML源代碼,我能找到的差異輸入控件名稱的下面

//JSP 
<form:input path="contacts[${status.index}].firstname"/> 
//corresponding HTML not working 
<input id="contacts0.firstname" name="contacts0.firstname" type="text" value="Barack"/> 

//JSP 
<input name="contacts[${status.index}].firstname" value="${contact.firstname}"/> 
//corresponding HTML working! 
<input name="contacts[0].firstname" value="Barack"/> 

這是一個已知的問題,或者是有什麼我失蹤?

Regards, Makesh。

回答

1

您可以直接使用名稱屬性的形式:輸入標籤如下,它可能工作。

<td><form:input name="contacts[${status.index}].firstname" path="contacts[${status.index}].firstname"/></td>