나는 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을 제대로 관리하지 않는다고 생각합니다.
제안이 있습니까? 어떤 아이디어? 나는 전문가를 위해 해결하는 것이 간단한 문제라고 확신한다.
편집 :이
사용자가 버튼을 클릭하면 테이블의 데이터는이 이벤트의 핸들러가 서버에 요청을 수행합니다 새로 고칠 수 있지만,이 요청이 첫 번째 클릭 만에 전송됩니다.
GET가 문제가되지 않습니다. 문제는 데이터를 캐시해서는 안되는 경우 응답에서 그렇게 말해야한다는 것입니다.그리고 캐시해도 괜찮지 만 클라이언트는 캐시 된 데이터를 사용하기를 원하지 않습니다. 요청에서 이렇게 말해야합니다 ('Cache-Control : no-cache' 헤더 설정). –
예, GET을 위해 Cache-Control을 설정하거나 POST의 요청 유형을 변경하면 POST를 사용하는 것이 더 우아하다고 생각합니다. 모든 종류의 데이터 가져 오기에 GET을 사용하는 것은 추악한 연습이며, URI 길이, 모든 매개 변수를 인코딩해야하는 등 제한 사항을 인식하지 못하면 많은 어려움을 겪을 수 있습니다. –
예, 정확히 토마스입니다. 이전에, 나는'Cache control : no-cache'를 설정하려고 시도했으며 효과가있었습니다. 하지만 데이터를 캐시해야하고 서버와의 많은 상호 작용이 너무 비싸기 때문에 이것이 좋은 방법인지는 잘 모르겠습니다. – daniele