Verwenden Sie einfach Federform, um Benutzerobjekt zu bilden.
<c:url var="registration" value="/registration"></c:url>
<form:form role="form" commandName="user" action="${registration}" method="POST">
<c:forEach items="${fields}" var="field" varStatus="loop">
<p><c:out value="${field.name}" /> <c:if test="${field.required == true}"><c:out value=" *" /></c:if></p>
<p><form:input path="name[${loop.index}]" type="hidden" value = "${field.name}" /></p>
<p><form:input path="value[${loop.index}]" type="text" required = "${field.required}"/></p>
</c:forEach>
<button type="submit">Submit</button>
<button type="reset">Reset</button>
</form:form>
Objekt für collect Daten:
public class UserDto {
private String[] name;
private String[] value;
public String[] getName() {
return name;
}
public void setName(String[] name) {
this.name = name;
}
public String[] getValue() {
return value;
}
public void setValue(String[] value) {
this.value = value;
}
}
Und Controller:
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String registration (@ModelAttribute("user") UserDto dto){
User user = new User();
String[] values = dto.getValue();
String[] names = dto.getName();
ArrayList<FieldValue> fieldValues = new ArrayList<FieldValue>();
for (int i = 0; i < names.length; i++){
Field field = fieldDao.findByName(names[i]);
FieldValue tmp = new FieldValue(values[i], field, user);
fieldValues.add(tmp);
}
user.setFields(fieldValues);
userDao.save(user);
return "redirect:/fields";
}