2010-12-04 1 views
2

저는 Apache Wicket으로 첫 발걸음을 옮기고 있으며 다음과 같은 문제를 겪고 있습니다. 나는 해당 항목 옆에 "삭제"링크를 표시하는 ListView이 있습니다. 삭제 링크를 클릭하면 목록 항목이 나타내는 항목이 데이터베이스에서 삭제되지만 목록 자체는 브라우저에서 페이지를 수동으로 다시로드 할 때까지 업데이트되지 않습니다.개찰구 목록보기가 새로 고침되지 않습니다.

IModel<List<SampleEntity>> sampleEntityListModel = new LoadableDetachableModel<List<SampleEntity>>() { 
     @Override 
     protected List<SampleEntity> load() { 
      return mSampleEntityBA.findAll(); 
     } 
    }; 

mListview = new ListView<SampleEntity>("listview", sampleEntityListModel) { 
     @Override 
     protected void populateItem(final ListItem<SampleEntity> item) { 
      item.add(new Label("listlabel", new PropertyModel<String>(item.getModelObject(), 
        "text"))); 
      item.add(new Link<SampleEntity>("deleteLink", item.getModel()) { 
       @Override 
       public void onClick() { 
        mSampleEntityBA.delete(item.getModelObject()); 
       } 
      }); 
     } 
}; 

답변

3

onClick을 호출하면 item.getModelObject()가 sampleEntityListModel에서 가져와 mSampleEntityBA.findAll()을 호출합니다. sampleEntityListModel의 모델 객체는 요청주기의 지속 기간 동안 캐시됩니다 (분리 될 때까지 - 보통 원하는대로). delete()에 대한 호출을 인식하지 못합니다.

sampleEntityListModel을 리프레시하려면, 삭제 직후에 sampleEntityListModel.detach()를 추가합니다 (sampleEntityListModel를 final로 할 필요가 있습니다 만, 추가 상태를 직렬화하지 않게됩니다). 그러면 목록보기가 요청주기의 나중에 렌더링 될 때 모델이 새로운 데이터 세트를 가져옵니다.

0

당신은 아마 대신에 링크의 AjaxLink을 원하고, 당신은 아마도 위키 개찰구 1.3 코드 대신 1.4을 가지고 있다는 사실을 조금 조정, 전술이 here을 설명하여, 목록 새로 고침을해야 .

그러나 RefreshingView 또는 DataView와 같은 다른 리피터를 사용하는 것이 더 나을 수도 있습니다. 다양한 중계기의 몇 가지 예가 있습니다 here. 그 중 어느 것도 당신이 찾고있는 것이 아니지만 그 코드를 보면 도움이 될 것입니다.

0

문제는 다음과 같습니다. mSampleEntityBA.findAll(); 잘못된 데이터가 반환됩니다. 더 많은 코드를 보지 않고 도울 수 없습니다.

다른 메모에서 데이터베이스 백업 목록을 사용하여 작업 할 때는 실제로 DataView를 사용해야합니다.

0

DataView 대신 wiQuery 프로젝트에서 JQGrid를 체크 아웃 할 수도 있습니다.