2013-04-22 3 views
0


나는 GWT에 초보자입니다. JSON 객체에 두 개의 콜렉션이 들어 있는지 묻는 페이지의 코드를 작성하고 있는데이 콜렉션 중 하나를 사용하여 Flextable을 채 웁니다.DOM, GWT의 컬렉션에서 항목을 삭제하는 방법

public class Users extends JavaScriptObject { 

protected Users() { 
} 

public final native JsArray<Link> getLinks() /*-{ 
    return this.links; 
}-*/; 

public final native JsArray<User> getCollection() /*-{ 
    return this.collection; 
}-*/; 
} 

는 특히 내가 Flextable을 채우기 위해 (collection라는) 두 번째 컬렉션을 사용하고 있습니다 :
이 내 JSON 개체입니다.
하지만 내 문제는 테이블에서 하나의 행을 삭제할 때 서버를 삭제하는 방법 (서버가 해당 항목을 성공적으로 삭제)으로 요청을 보내도 GWT가 생성하지 않는 테이블을 새로 고치려고 할 때 서버에 대한 GET 요청 (코드에 작성된 경우에도) 및 사용자 객체는 삭제 된 항목과 이전과 동일합니다.
나는이 방법을 사용하여 컬렉션에서이 항목을 삭제하는 것을 시도했다 :

public static native void remove(JsArray<?> arr, int index, int count) /*-{ 
                       arr.splice(index, count); 
                    }-*/; 
.... 
remove(users.getCollection(), index, users.getCollection().length()); 

을 그리고 난이 다른 기술을 시도 :

users.getCollection().set(index, null); 

그러나 두 경우 모두

, 내가 예상 결과를 얻을하지 않습니다를, 테이블을 새로 고칠 때 삭제 된 항목을 다시 찾습니다.
DOM을 제대로 관리하지 않는다고 생각합니다.
제안이 있습니까? 어떤 아이디어? 나는 전문가를 위해 해결하는 것이 간단한 문제라고 확신한다.

편집 :
사용자가 버튼을 클릭하면 테이블의 데이터는이 이벤트의 핸들러가 서버에 요청을 수행합니다 새로 고칠 수 있지만,이 요청이 첫 번째 클릭 만에 전송됩니다.

답변

0

기본적으로 두 가지 방법이 있습니다. 첫 번째 방법은 서버 쪽에서 Cache Controlno-cache으로 설정하는 것입니다. 예를 들어 레거시 응용 프로그램의 경우와 같이 서버 측에서 코드를 수정할 수없는 경우에는 귀하의 요청에있는 매개 변수의 난수. 요청에는 무작위로 생성 된 숫자 인 추가 매개 변수 인 url이 있습니다 (http:\\mydomain.com\something?random=12345). 두 개의 서로 다른 요청은 다른 번호를 가지며 두 번째 요청에서는 캐시 된 첫 번째 요청의 응답이 무시됩니다. 현명한 습관은 아니지만 효과가 있습니다.

-1

GET 요청이 GWT, 프록시 서버 ...에 의해 캐싱되고 있기 때문에 이와 같은 데이터를 얻으려면 HTTP POST 요청을 사용하는 것이 좋습니다.

또한 항목을 삭제하기위한 서버 코드가 올바르게 작동하는지 확인하고 방화 벽이나 크롬 콘솔에서 서버 응답을 수동으로 확인하여 응답에 삭제 된 레코드가 있는지 확인하십시오.

플렉스 테이블을 채우기 위해 사용하는 코드를 게시하십시오. 데이터를 다시 채우기 전에 지우시겠습니까?

편집 :

link를 참조하십시오.

celltable http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellTable (아래에 표시되는 요소 목록을 포함하고 있으므로)을 사용하거나 FlexTable에 표시되는 데이터를 보유하기 위해 일부 모음 (ArrayList)을 사용할 수있는 경우 그런 다음 해당 컬렉션을 쉽게 수정하고 flex 테이블을 다시 그릴 수 있습니다.

+0

GET가 문제가되지 않습니다. 문제는 데이터를 캐시해서는 안되는 경우 응답에서 그렇게 말해야한다는 것입니다.그리고 캐시해도 괜찮지 만 클라이언트는 캐시 된 데이터를 사용하기를 원하지 않습니다. 요청에서 이렇게 말해야합니다 ('Cache-Control : no-cache' 헤더 설정). –

+0

예, GET을 위해 Cache-Control을 설정하거나 POST의 요청 유형을 변경하면 POST를 사용하는 것이 더 우아하다고 생각합니다. 모든 종류의 데이터 가져 오기에 GET을 사용하는 것은 추악한 연습이며, URI 길이, 모든 매개 변수를 인코딩해야하는 등 제한 사항을 인식하지 못하면 많은 어려움을 겪을 수 있습니다. –

+0

예, 정확히 토마스입니다. 이전에, 나는'Cache control : no-cache'를 설정하려고 시도했으며 효과가있었습니다. 하지만 데이터를 캐시해야하고 서버와의 많은 상호 작용이 너무 비싸기 때문에 이것이 좋은 방법인지는 잘 모르겠습니다. – daniele

관련 문제