2013-02-01 1 views
2

질문은 getting a spring model attribute list element using an index from javascript을 기반으로하며 html 요소의 각 이름에 인덱스가 있어야한다고 설명합니다. 예제 사용자 [0]스프링 mvc로 목록에 요소 바인딩 ModelAttribute

사용자가 제출하기 전에 목록에서 요소를 dinamically 추가하거나 제거 할 수있는 양식이 있습니다. 제가 예를 넣어 보자 : 양식은 이제 3 개 입력을 포함 할 수 있도록 우리가, 3 사용자를 추가 :

<input name="user[0].name" type="text" /> 
<input name="user[0].surname" type="text" /> 
<input name="user[1].name" type="text" /> 
<input name="user[1].surname" type="text" /> 
<input name="user[2].name" type="text" /> 
<input name="user[2].surname" type="text" /> 

우리는이를 제출하는 경우

, 우리는 3 사용자 이름과 성을 가진 각을해야합니다. 우리는 사용자를 제거하려고 할 때 문제가 온다 [1] 때문에 나는 욕실까지이 HTML과 : 우리는이 양식을 제출하면

<input name="user[0].name" type="text" /> 
<input name="user[0].surname" type="text" /> 
<input name="user[2].name" type="text" /> 
<input name="user[2].surname" type="text" /> 

, 스프링은 여전히 ​​3 사용자를 생성하지만, 사용자가 [1] 널 (null)이있을 것이다 이름과성에 대한 값.

입력 이름을 항상 "올바른"형식으로 처리 할 수 ​​있다는 것을 알고 있습니다. 그러나 다른 해결책이 있습니까?

<input name="user[].name" type="text" /> 
<input name="user[].surname" type="text" /> 
<input name="user[].name" type="text" /> 
<input name="user[].surname" type="text" /> 

과 같은 형식이 문제를 해결할 수 있다고 생각했지만 그때 나는 깨달았습니다. 스프링이 어떻게 성을 가지고 있는지 알 수 있습니다.

더 나은 솔루션에 대한 아이디어가 있습니까?

<div class="container"> 
    <input name="name" type="text" /> 
    <input name="surname" type="text" /> 
</div> 
<div class="container"> 
    <input name="name" type="text" /> 
    <input name="surname" type="text" /> 
</div> 
<div class="container"> 
    <input name="name" type="text" /> 
    <input name="surname" type="text" /> 
</div> 

그래서 양식을 제출하기 전에 내가 updateIndexedInputNames($(".container"), "user");

를 사용

:
+0

필드를 제거하는 방법은 무엇입니까? HTML 숨기기/비활성화 또는 제거를 의미합니까? – xyz

+0

같은 종류의 문제가 있었는데, 아마도 이것이 당신을 도울 수 있습니다 : [Spring 3 MVC : 동적 폼 내에서 일대 다 (create/update에서 추가/삭제)] (http://stackoverflow.com/a/) 9993144/1225328) – sp00m

+0

안녕하세요 Ajinkya, 입력을 제거하려면 jquery를 사용하고 있습니다. 그들은 몇몇 divs로 감싸이고 다른 HTML 부호는 내가 생략 한 것이다. – gfournier

답변

1

마지막으로 나는 (지금 내가 전에 실종 된 컨테이너를 추가 할 것입니다 코드를 다음에) 인덱스 변수없이 모든 입력을 추가

그리고 나를 updateIndexedInputNames의 코드를 공유 할 수 있습니다 :

function updateIndexedInputNames($container, name){ 
    $container.each(function(containerIndex, container){ 
     $(this).find("input,select").each(function(index, element){ 
      $(element).attr("name", name+"["+containerIndex+"]."+element.name); 
     }); 
    }); 
} 

나는이 @ sp00m에 의해 제안 된 것보다 더 나은 솔루션이라고 생각하지 않습니다를하지만, 그것도 작동합니다.

희망이 있으면 도움이됩니다.

관련 문제