Wicket PagingNavigator+DataView と form のcheckbox を組み合わせ
の続きです。
Dataview生成でデータ読み出しを約束した IDataProvider の実装について、
これは、Google guice で、GridPickModalPage のIDataProviderフィールドに
インジェクトさせます。
WebApplication のinit() で
addComponentInstantiationListener(
new GuiceComponentInjector(this
,new AbstractModule(){
@Override
protected void configure(){
binder().bind(
new TypeLiteral<IDataProvider<Paper>>(){})
.to(PaperQuery.class);
binder().bind(DataDao.class)
.to(DataDaoImpl.class);
}
}
}));
と書きます。
IDataProvider の実装クラスは、、、
--------------------------------------------------
public class PaperQuery implements IDataProvider<Paper>{
private DataDao dao;
@Inject
public PaperQuery(DataDao dao){
this.dao = dao;
}
/* データ取得→List→itertor*/
@Override
public Iterator<? extends Paper> iterator(int first,int count){
return this.dao.getData(first,count).iterator();
}
@Override
public IModel<Paper> model(Paper paper){
return new Model<Paper>(paper);
}
@Override
public int size(){
return this.dao.allSize();
}
@Override
public void detach(){
}
}
--------------------------------------------------
DataDao も Google guice インジェクトで生成させます。
モーダルウィンドウは、、、
--------------------------------------------------
public class GridPicker extends Panel{
public GridPicker(String id,final Set<Paper> selectionPapers){
super(id);
// checkbox 選択されたものを受け取る。
// ListView で表示させるために、Listに変換
List<Paper> selectList = new ArrayList<Paper>();
for(Paper p : selectionPapers) selectList.add(p);
Form<Void> form = new Form<Void>("pickform");
form.add(new ListView<Paper>("pickview",selectList){
@Override
protected void populateItem(ListItem<Paper> item){
Paper paper = item.getModelObject();
item.add(new Label("name",paper.getName()));
item.add(new Label("width",Integer.toString(paper.getWidth())));
}
});
form.add(new AjaxButton("ok"){
@Override
protected void onSubmit(AjaxRequestTarget target,Form<?> f){
// OKボタンの処理を記述
ModalWindow.closeCurrent(target);
}
});
form.add(new AjaxButton("cancel"){
@Override
public void onSubmit(AjaxRequestTarget target, Form<?> f){
// キャンセルボタンの処理を記述
ModalWindow.closeCurrent(target);
}
});
add(form);
}
}
-----------------------------------------------------
モーダルウインドウ GridPicker.html
HTML 抜粋して書くと、、、
<wicket:panel>
<table border="1" cellspacing="0">
<form wicket:id="pickform">
<thead>
<tr class="pickhead">
<th class="pickhead">Paper</th><th class="pickhead">WIDTH</th>
</tr>
</thead>
<tbody>
<tr wicket:id="pickview">
<td wicket:id="name">[name]</td>
<td wicket:id="width" align="right">[width]</td>
</tr>
</tbody>
<tr><td colspan="2"><br/></td></tr>
<tr><td colspan="2" nowrap="nowrap">
<div>
<input type="submit" wicket:id="ok" value="OK"/>
<button wicket:id="cancel">キャンセル</button>
</div>
</td></tr>
</form>
</table>
</wicket:panel>