본문 바로가기
Spring

[Spring] Datatables 의 sorting 및 paging 전송 시 파리미터 매핑 오류

by Real Iron 2019. 2. 8.

Datatables의 serverSide 가 true 일 경우 paging 및 sorting 시 서버 호출이 일어난다.

하지만 넘어가는 파라미터가 제대로 spring mvc 에서 매핑을 해주지 못하는 현상이 발생했다.


해결책은 jquery.spring-friendly.min.js 를 추가하는 것이다.


기존 파라미터의 경우 columns[0][data] 으로 넘어가는 것을 columns[0].data 으로 변환해 주는 역활을 한다.

배열인데 인덱스가 아닌 문자열이 들어가서 오류가 발생하는 듯하다.



참조

https://stackoverrun.com/ko/q/6494522


내 QueryString 매개 변수를 Spring JavaBean Command 객체에 매핑하려고하는데 실제로 빠져 있습니다. 지금까지 내 질문.

내 데이터 테이블의 각 동작이 내 Spring 애플리케이션에 AJAX 요청을 트리거하도록 server side processing과 함께 jQuery Datatables 플러그인을 사용하고 있습니다. 나는 나의 봄 컨트롤러에서 수신 얼마나

http://localhost:8080/relatorios/produtos-source?draw=2&columns[0][data]=nome&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=nomesAlternativos&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=true&columns[1][search][value]=&columns[1][search][regex]=false&order[0][column]=2&order[0][dir]=asc&start=0&length=10&search[value]=ss&search[regex]=false&_=1400248561282 

이는 다음과 같습니다 :

이이 DataTable의 플러그인 내 나머지 서비스에 전송하는 매개 변수입니다

@RequestMapping(value = "/produtos-source", method = RequestMethod.GET) 
@ResponseStatus(HttpStatus.OK) 
@ResponseBody 
public ProdutoTable dataTableRequest(@ModelAttribute DataTableCriterias criterias) { 
    ... 
} 

그리고 마지막으로,이 내입니다 (표시 @ModelAttribute에 의해) DataTableCriterias 자바 빈즈 :

public class DataTableCriterias { 
    private int draw; 
    private int start; 
    private int length; 

    private Map<SearchCriterias, String> search; 

    private List<Map<OrderCriterias, String>> order; 

    private List<Column> columns; 

    public enum SearchCriterias { 
     value, 
     regex 
    } 

    public enum OrderCriterias { 
     column, 
     dir 
    } 

    public class Column { 
     private String data; 
     private String name; 
     private boolean searchable; 
     private boolean orderable; 
     private Map<SearchCriterias, String> search; 
    } 
} 

(get/setters 생략)

거의 완벽하게 작동합니다! 나는이 줄을 제거하는 경우 :

private List<Column> columns; 

는 봄이 자동적으로 쿼리 문자열에서 내 DataTableCriterias 빈을 채 웁니다 (그러나 물론, 나는 매핑 된 컬럼 속성하지 않음)

을하지만이 라인은 I를 추가로

,536,913,632 : 제가보기에는

2014-05-16 17:20:16.605 ERROR 2368 --- [tomcat-http--99] o.a.c.c.C.[.[.[.[dispatcherServlet]  : Servlet.service() for servlet [dispatcherServlet] in context with path [/relatorios] threw exception [Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'columns[0][data]' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Illegal attempt to get property 'columns' threw exception; nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'columns' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Could not instantiate property type [com.bergermobile.rest.domain.DataTableCriterias$Column] to auto-grow nested property path: java.lang.InstantiationException: com.bergermobile.rest.domain.DataTableCriterias$Column] with root cause 

org.springframework.beans.NullValueInNestedPathException: Invalid property 'columns' of bean class [com.bergermobile.rest.domain.DataTableCriterias]: Could not instantiate property type [com.bergermobile.rest.domain.DataTableCriterias$Column] to auto-grow nested property path: java.lang.InstantiationException: com.bergermobile.rest.domain.DataTableCriterias$Column 
    at org.springframework.beans.BeanWrapperImpl.newValue(BeanWrapperImpl.java:651) 

, 주요 문제는 때때로 또한 삼차원 배열 DataTable의 플러그인에 의해 전송 된 '열'매개 변수가 bidimensional이라고하고이 오류 10

columns[0][data]=nome 
columns[0][search][regex]=false 

내 콩이 옳았다는 것을 알았지 만,이 오류가 발생하고 이제 막혔습니다.

아이디어가 있으십니까?

고맙습니다.


나는 파티에 늦었지만, 이것 : https://github.com/darrachequesne/spring-data-jpa-datatables

은 귀사의 datatables 입력을 우아하게 읽는 멋진 대안입니다. JPA를 사용하지 않으려는 경우에도 DataTablesInput 및 DataTablesOutput 클래스를 사용하여 입력을 올바르게 읽을 수 있습니다. jquery.spring-friendly.min.js도 포함되어있어서 Spring이 들어오는 변수를 쉽게 읽을 수 있습니다.

감사합니다. 멋진 솔루션으로 https://github.com/darrachequesne에게 감사드립니다.