2016-08-29 10 views
0

I erstellen jsp und Felder einfügen auf Server-Seite (mit jstl):Senden dynamische Anzahl von Feldern

<c:forEach items="${fields}" var="field"> 
 
    <p><c:out value="${field.name}" /></p> 
 
    <p><input type="hidden" ng-model ="name" value = "${field.name}" /></p> 
 
    <p><input type="text" ng-model ="value"/></p> 
 
</c:forEach>

Wie ich Daten an den Server wie JSON-Objekte einreichen können:

var array = [ 
 
    { name: $scope.name, value: $scope.value }, 
 
    { name: $scope.name, value: $scope.value }, 
 
    .......................................... 
 
    { name: $scope.name, value: $scope.value } 
 
];

Ich suche nach der praktischsten Lösung.

Antwort

0

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"; 
    } 
Verwandte Themen