2013-03-30 30 views
0

大家好我似乎有一個問題,我的檢票口項目。檢票窗口與列表視圖

基本上我有一個AjaxLink使單擊應該更新可裝載Detatcheable模式,並重新渲染更新的模型

這裏的結果列表視圖時,我的代碼

package com.blackwell.wicket.manager; 



public class ManageExercise extends BaseManagerPage { 
private static final long serialVersionUID = -3241765837700606142L; 

private ModalWindow mwAddExercise; 

private Integer searchId; 
private String name; 
private String complexity; 
private LoadableDetachableModel<List<Exercise>> modelList; 

@SpringBean 
ExerciseJdbc exerciseJdbc; 

public ManageExercise() { 

    add(mwAddExercise = new ModalWindow("mwAddExercise")); 

    final WebMarkupContainer wmc = new WebMarkupContainer("wmc"); 
    wmc.setOutputMarkupId(true); 

    modelList = exerciseModel(searchId, name, complexity); 

    Form<String> searchForm = new Form<String>("searchForm"); 
    searchForm.add(new TextField<Integer>("searchId", 
      new PropertyModel<Integer>(this, "searchId"))); 
    searchForm.add(new TextField<String>("searchName", 
      new PropertyModel<String>(this, "name"))); 
    // searchForm.add(new DropDownChoice<String>("searchComplexity", 
    // new PropertyModel<String>(this, "complexity"))); 
    searchForm.add(new AjaxLink<String>("searchSubmit") { 
     private static final long serialVersionUID = 1L; 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      modelList = exerciseModel(searchId, name, complexity); 
      target.add(wmc); 
     } 

    }); 

    add(searchForm); 

    ListView<Exercise> lvExercise = new ListView<Exercise>("lvExercise", 
      modelList) { 
     private static final long serialVersionUID = 1L; 

     @Override 
     protected void populateItem(final ListItem<Exercise> item) { 
      final Exercise model = item.getModelObject(); 
      item.add(new Label("id", Integer.toString(model.getId()))); 
      item.add(new Label("name", model.getName())); 
      item.add(new ExternalLink("demoUrl", model.getDemoUrl(), model 
        .getDemoUrl())); 
      item.add(new Label("complexity", model.getComplexity() 
        .getLevel())); 
      item.add(new AjaxLink<String>("edit") { 
       private static final long serialVersionUID = 1L; 

       @Override 
       public void onClick(AjaxRequestTarget target) { 
        renderAddExercise(item.getModelObject()); 
        mwAddExercise.show(target); 
       } 
      }); 
      item.add(new AjaxLink<String>("delete") { 
       private static final long serialVersionUID = 1L; 

       @Override 
       public void onClick(AjaxRequestTarget target) { 
        exerciseJdbc.disableExercise(model); 
        target.add(wmc); 

       } 
      }); 
     } 
    }; 

    wmc.add(lvExercise); 
    add(wmc); 

    mwAddExercise.setWindowClosedCallback(new WindowClosedCallback() { 
     private static final long serialVersionUID = 1L; 

     public void onClose(AjaxRequestTarget target) { 
      target.add(wmc); 
     } 
    }); 

    AjaxLink<String> addExercise = new AjaxLink<String>("addExercise") { 
     private static final long serialVersionUID = 1L; 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      renderAddExercise(new Exercise()); 
      mwAddExercise.show(target); 

     } 

    }; 

    add(addExercise); 

} 

private LoadableDetachableModel<List<Exercise>> exerciseModel(
     final Integer id, final String name, final String complexity) { 
    LoadableDetachableModel<List<Exercise>> exercideModel = new LoadableDetachableModel<List<Exercise>>() { 
     private static final long serialVersionUID = 1L; 

     protected List<Exercise> load() { 
      return exerciseJdbc.fetchAllExercises(id, name, null, 
        complexity); 
     } 
    }; 
    return exercideModel; 
} 

private void renderAddExercise(Exercise exercise) { 
    mwAddExercise.setContent(new AddExercisePanel(mwAddExercise 
      .getContentId(), exercise, mwAddExercise)); 
} 

public Integer getSearchId() { 
    return searchId; 
} 

public void setSearchId(Integer id) { 
    this.searchId = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getComplexity() { 
    return complexity; 
} 

public void setComplexity(String complexity) { 
    this.complexity = complexity; 
} 

}

現在,問題出在點擊鏈接時不會發生。

我已經確定在load()方法中運行的方法返回我期望的正確參數傳遞時的方法。

modelList = exerciseModel(searchId, name, complexity); 

你正在創建你的LoadableDetachableModel的新實例,讓您的ListView仍然有以前的一個:

當你這樣做的任何幫助,將不勝感激

感謝

回答

2

在Wicket中,您必須更新模型的對象,而不是模型本身。

+0

好的,你能告訴我接受的方式是什麼嗎? – user1383163

+1

modelList.setObject(...) – jordeu

0

使用也propertymodels在populateItem

新標籤( 「複雜性」,新PropertyModel(item.getModel(), 「complexity.level」))

拆離modelList以及(onDetach())