2013-04-24 2 views
0

내부의 목록을 포장하지 않고 요청 PARAMS에서 자바 빈즈의 목록을 구하는 나는이 컨트롤러가 필요 : 내가 수동으로 사용자 작업의 목록을 만들 필요가 클라이언트에서봄 @MVC 방법 객체

@RequestMapping("/path/to/my/app") 
public String process(List<JavaBean> javaBeans){ 
    // Do something with the list 
} 

, like so

<form action="/path/to/my/app"> 
    <input name="javaBeans[0].field1"/> 
    <input name="javaBeans[0].field2"/> 
    <input name="javaBeans[0].field3"/> 
    <br/> 
    <input name="javaBeans[1].field1"/> 
    <input name="javaBeans[2].field2"/> 
    <input name="javaBeans[3].field3"/> 
    <!-- and so forth --> 
</form> 

나의 주된 문제는 내가 contoller 안에 빈리스트를 받는다는 것이다. 코드를 작동 시키려면 다른 javabean 안에 넣어야합니다. 하지만

public class BeanWrapper{ 
    private List<JavaBean> javaBeans; 

    // Getter and setter 
} 

및 컨트롤러

@RequestMapping("/path/to/my/app") 
public String process(BeanWrapper wrapper){ 
    List<JavaBean> list = wrapper.getJavaBeans(); 
    // Do something with the list 
} 

이 버전의 작품을 다음과 같이 내가 불필요하게 객체 주위에 내 목록을 포장해야합니다. 주위에 방법이 있습니까?

미리 감사드립니다.

+0

spring : bind 태그 또는 spring form 태그를 사용하지 않는 이유는 무엇입니까? – ArunM

+0

나는 그렇게 할 수는 있지만 목록에있는 항목의 수는 사용자 작업에 따라 클라이언트에서 증가하거나 감소 할 수 있습니다. 어쨌든 평범한 html로 작동시키는 법을 알아 내야합니다. 또 다른 메모에서 나는 호기심이 많다. –

답변

0

당신이 시도 할 수 있습니다 :

public String process(@RequestParam("javaBeans[]") List<JavaBean> javaBeans) { 

업데이트 :

구문 사용하여 인덱스 (javaBeans[1]가) 현재 바인딩 봄 기본적으로 지원되지 않습니다. 의견에서 언급했듯이 @RequestBody 주석을 사용하여이 제한을 극복 할 수 있습니다.

public String process(@RequestBody List<JavaBean> javaBeans) 

이것은 POST 요청을 필요로하며, 하나의 데이터는 다른 형식 (예를 들어, JSON) 또는 당신의 자신의 메시지 컨버터를 구현하실 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 나는이 메시지'필수 목록 매개 변수 'javaBeans []'존재하지 않는다 '를 받고있다 –

+0

이 [질문] (http://stackoverflow.com/questions/6269042/list-of-objects-as-requestparam-in- spring-mvc) 이런 종류의 바인딩은 지원되지 않습니다. –

+1

너무 나쁘다. 그것은 지표의 한계이다. 이것은 여러 번 논의되었으며 현재는 다른 해결책이 없습니다. JSON을 서버로 보낸다면 (예 : AJAX를 통해)'public String process (@RequestBody List javaBeans) {'을 사용할 수 있어야합니다. 솔루션이 불필요한 오버 헤드처럼 보일 수도 있지만 가장 쉬운 방법입니다. 어쩌면 스프링 4가 더 나은 솔루션을 제공 할 것입니다. – zeroflagL