我有Test類,我有jsp頁面,其中包含綁定到測試對象列表的輸入。我想從我的jsp中獲取編輯信息的測試列表。 我的測試類是:Spring MVC,捕獲像@ModelAttribute這樣的對象列表
@Entity
@Table(name = "[NewMVC].[dbo].[Tests]")
public class Test {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "testQuestion")
private String testQuestion;
@Column(name = "optionOne")
private String optionOne;
@Column(name = "optionTwo")
private String optionTwo;
@Column(name = "optionThree")
private String optionThree;
@Column(name = "subjectType")
private int subjectType;
@Column(name = "correctOptionNumber")
private int correctOptionNumber;
//gets, sets...
,我有一個jsp中,我可以用測試編輯列表:
<form:form action="saveTestsEdits" method="POST" modelAttribute = "testWrapper">
<c:forEach items="${testWrapper.testList}" var="test" varStatus="i">
<h2> Test number ${i.index+1} </h2>
<form:hidden value="${test.id}" path = "testList[${i.index}].id" />
<table>
<tr><td>Test Question:</td> <td><form:input path = "testList[${i.index}].testQuestion" value = "${test.testQuestion}"/> </td></tr>
<tr><td>Option one: </td> <td><form:input path = "testList[${i.index}].optionOne" value= "${test.optionOne}"/> </td>
<td>
<c:choose>
<c:when test="${test.correctOptionNumber == 1}"> <form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "1" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "1"/> </c:otherwise>
</c:choose>
</td>
</tr>
<tr><td>Option two: </td> <td><form:input path = "testList[${i.index}].optionTwo" value= "${test.optionTwo}"/> </td>
<td>
<c:choose>
<c:when test="${test.correctOptionNumber == 2}"> <form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "2" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "2"/> </c:otherwise>
</c:choose>
</td>
</tr>
<tr><td>Option three: </td> <td><form:input path = "testList[${i.index}].optionThree" value= "${test.optionThree}"/> </td>
<td>
<c:choose>
<c:when test="${test.correctOptionNumber == 3}"> <form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "3" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].correctOptionNumber" value = "3"/> </c:otherwise>
</c:choose>
</td>
</tr>
<tr><th>Subject type:</th></tr>
<tr><td>Georaphy: </td>
<td>
<c:choose>
<c:when test="${test.subjectType == 3}"> <form:radiobutton path = "testList[${i.index}].subjectType" value = "3" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].subjectType" value = "3"/></c:otherwise>
</c:choose>
</td>
</tr>
<tr><td>Mathematics: </td>
<td>
<c:choose>
<c:when test="${test.subjectType == 4}"><form:radiobutton path = "testList[${i.index}].subjectType" value = "4" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].subjectType" value = "4"/></c:otherwise>
</c:choose>
</td>
</tr>
<tr><td>History: </td>
<td>
<c:choose>
<c:when test="${test.subjectType == 5}"><form:radiobutton path = "testList[${i.index}].subjectType" value = "5" checked = "checked"/> </c:when>
<c:otherwise><form:radiobutton path = "testList[${i.index}].subjectType" value = "5"/></c:otherwise>
</c:choose>
</td>
</tr>
</table>
<br>
</c:forEach>
<input type="submit" value="Submit" />
</form:form>
</body>
</html>
其實我不是發送到頁面,清晰的列出,但我有一種特殊的所謂TestWrapper類的樣子:
public class TestWrapper {
private List<Test> testList = null;
public TestWrapper(List<Test> testList) {
this.testList = testList;
}
public void setTestList(List<Test> testList) {
this.testList = testList;
}
public List<Test> getTestList() {
return testList;
}
}
我試着使用:
@RequestMapping(value="/saveTestsEdits", method = RequestMethod.POST)
public String register(@ModelAttribute("testWrapper")TestWrapper testWrapper , HttpServletRequest request)
但它給了我一個例外:
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/mvc] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.andrew.models.TestWrapper]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.andrew.models.TestWrapper.<init>()] with root cause
java.lang.NoSuchMethodException: com.andrew.models.TestWrapper.<init>()
非常感謝您!
非常感謝這個問題!設法使用您的問題信息和病毒patel的答案讓我的工作!被困在一天之內! –