2014-07-11 5 views
0

나는 문서 생성을 위해 Spring Roo로 애플리케이션을 만들고있다. 이 StringField (다른 사람이 거의 동일)이며,Spring HashMap Form

public class Document { 

    @NotNull 
    private String titleDocument; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "relatedDocumentToThisDateField") 
    private Set<DateField> dateFields = new HashSet<DateField>(); 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "relatedDocumentToThisRadioButton") 
    private Set<RadioButtonField> radioButtonFields = new HashSet<RadioButtonField>(); 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "relatedDocumentToThisStringField") 
    private Set<StringField> stringFields = new HashSet<StringField>(); 
} 

이 분야의 3 개 종류에 대한 단순화 : 모든 사용자의 첫 번째 문서를 만들

public class StringField extends Field { 

    @NotNull 
    private String valueString; 

    @NotNull 
    private Boolean isEditable; 

    @ManyToOne 
    private Document relatedDocumentToThisStringField; 

    @NotNull 
    private String nameStringField; 
} 

때 필드 문서 다른 사용자가 작성해야합니다. 나는 문서가 나는 HashMap의 양식을 작성해야해야합니다 얼마나 많은 필드를 잘 모릅니다 때문에 (I am following this tutorial)

내의 HashMap은 다음과 같습니다 내 FillDocumentController에서

public class DynamicForm { 

    private Map<String, String> dynamicMap=new HashMap<String, String>(); 

    public Map<String, String> getDynamicMap() { 
    return dynamicMap; 
    } 

    public void setDynamicMap(Map<String, String> dynamicMap) { 
    this.dynamicMap = dynamicMap; 
    } 

} 

나는이 :

@RequestMapping(value = "/{id}", params = "form", produces = "text/html") 
public String updateForm(@PathVariable("id") Long id, Model uiModel) { 

    ... 

    // Create DynamicForm Map 
    DynamicForm dynamicForm = new DynamicForm(); 
    for (Field field : allFields) { 

     // Is StringField? 
     if (field.getClass().equals(StringField.class) == true) { 
     StringField stringField = (StringField) field; 

     if(stringField.getIsEditable() == true) { 
      dynamicForm.getDynamicMap().put(stringField.getNameStringField(), stringField.getValueString()); 
      } 
     } 
    } 

uiModel.addAttribute("dynamicForm", dynamicForm); 

return "filldocuments/update"; 
} 

이를 보기입니다 :

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

<div 
xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" 
xmlns:form="http://www.springframework.org/tags/form" 
xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> 

<jsp:directive.page contentType="text/html;charset=UTF-8" /> 
<jsp:output omit-xml-declaration="yes" /> 

<form:form action="/DocumentGenerator/filldocuments/add" modelAttribute="dynamicForm" method="post"> 

     <c:forEach items="${dynamicForm.dynamicMap}" var="element"> 

       <input name="element['${element.key}']" value="${element.value}"/> 

     </c:forEach> 

     <input type="submit" value="Save" /> 

     </form:form> 

</div> 

그리고 이것은 catch th e modelAttribute :

@RequestMapping(value="/add", method = RequestMethod.POST, produces = "text/html") 
public String update(@ModelAttribute(value="dynamicForm") DynamicForm dynamicForm, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) { 

    for(String key : dynamicForm.getDynamicMap().keySet()) { 
     System.out.println("key="+key); 
    } 


    return "redirect:/filldocuments"; 
} 

내 문제는 dynamicForm이 비어 있다는 것입니다. uiModel 안에는 또 다른 DynamicForm이 있으며 비어 있습니다 (디버그 모드에 있음). 사용자가 채우는 데이터는 어디에 있습니까 ?? 나는 무엇이 잘못되었는지를 모른다!

답변

0

내 잘못은보기 그렇게되어야한다 :

<c:forEach items="${dynamicForm.dynamicMap}" var="dynamicMap"> 

     <input name="dynamicMap['${dynamicMap.key}']" value="${dynamicMap.value}"/> 

</c:forEach> 

그래서 오류가 변수 요소를 사용했다