2011-11-22 5 views
1

내 봄 mvc 응용 프로그램에서 사용자가 만들 수있는 수준이 있습니다. 이 수준에서는 취할 수있는 수준의 요구 사항 (자동차, 전화 등 필요)이 있습니다.봄 MVC 바인딩 문제

새 레벨을 만들 때 사용자는 이러한 모든 요구 사항의 목록을보고 해당 요구 사항을 필요한 요구 사항 영역으로 이동시킬 수 있습니다 (한 div에서 다른 div로 앞뒤로 이동하여 해당 요구 사항 영역으로 이동).

public class Level { 
    private String name; 
    private int id; 
    private int points 
    private List<Requirement> requirements; 
    .... 
} 

public class Requirement{ 
    private String name; 
    private String id; 
    .... 
} 
:이

<div id="allRequirements"> 
    <c:forEach var="requirement" items="${RequirementList}"> 
     <div class="requirements"> 
      <input type="hidden" value="${requirement.id}" name="id"/> 
      <h2><c:out value="${requirement.name}"/></h2> 
     </div> 
    </c:foreach> 
</div> 
<div id="requiredRequirements"></div> 

을 JSP처럼은 다음과 같이 보이는 RequirementList 요구 사항

수준과 요구 사항에 대한 모델의 목록을 반환 단지 모델 속성입니다 조금 보일 것이다

이고 컨트롤러에이 기능을 추가하는 방법은 다음과 같습니다.

@RequestMapping(value = "/level/addNewLevel", method = RequestMethod.POST) 
public String addNewLevel(@ModelAttribute("level") Level level, BindingResult result, Model model) 
{ 
    validator.validate(level, result); 
    if(result.hasErrors()) { 
     //show errors 
    } 
    else { 
     //add level 
    } 
} 

이제 내 문제에 :

수준의 이름, 점수, ID 등을 얻을 수 있지만 요구 사항은 전혀 나오지 않습니다. 나는이

String[] requiredRequirements = ((String) result.getFieldValue("requirements")).split(","); 
level.setRequirements(getRequirementsFromIDs(requiredRequirements)); 

내가 때문에 바인딩 결과에 validate 메소드를 호출 할 때까지이 잘 작동, 요구 사항이 그냥 양식을 제출하고, 같이 뭔가를 할 때 requiredRequirements에있는 div의에서 <input type='hidden' value='' + id +'' name="requirements"/>을 삽입하려 요구 사항이라는 숨겨진 필드의 문자열 목록이므로 형식이 일치하지 않습니다. 속성 편집기를 작성하는 것에 대해 생각했지만 해킹 문제를 해결할 수있는 해킹처럼 보입니다.

누구든지이 문제를 해결하는 방법에 대한 조언이 있는지 궁금합니다. 이 상황에 대한 때에 프로퍼티 편집기 (또는 더 나은 봄 3 변환기)를 작성 미리

+0

속성 편집기는 어떻게하는지, 왜 해킹이라고 생각합니까? – Affe

+0

봄을 시험해 보셨나요? http://mattfleming.com/node/134 –

+0

@Affe 내 상황에 대한 해킹처럼 보입니다. –

답변

2

에서

덕분에 해킹이 아닙니다. 그것이 바로 부동산 편집자들이하는 것입니다. 해킹을위한 솔루션 일 뿐이지 만 해킹을위한 해킹은 아닙니다.

그러나 목록 문제를 해결하는 더 좋은 방법이 있습니다. (String (id) ~ Requirement) 같은 단일 객체 용 스프링 3 변환기는 봄철 자동으로 Requirement의 List에 적용될 수 있습니다. 따라서 ID의 String 표현을 Requirement으로 변환 할 수있는 Converter 만 작성해야합니다. Spring은 이것을 List에도 적용 할 것이다.

+0

그래서 내가해야 할 일은 id의 문자열 표현을 요구 사항으로 변환하는 변환기를 작성하는 것입니다. 그러면 봄이 나를 위해 나머지를 할 것입니다. 그러면 문자열 목록을 요구 사항 목록으로 변환합니까? –

+0

그리고 등록해야합니다. - 그리고 예 - 봄도 목록에 적용됩니다. – Ralph

+0

마침내 작동했습니다. CustomCollectionEditor를 사용했습니다. –