事件拦截器是Dataset与被绑定对象的纽带,通过事件拦截器实现数据绑定
一个简单的数据绑定TextField,当Dataset发生ACTION_MOVE(当前记录行变动)事件时动态修改绑定字段内容,如下:
public interface DatasetInterceptor {
public boolean doBeforeIntercept(Dataset dataset, String action, Object[] params);
public void onIntercept(Dataset dataset, String action, Object[] params);
public void doAfterIntercept(Dataset dataset, String action, Object[] params, int resultCode);
}
一个简单的数据绑定TextField,当Dataset发生ACTION_MOVE(当前记录行变动)事件时动态修改绑定字段内容,如下:
public class DatasetText extends TextField implements DatasetFormField {
private Dataset dataset;
private DatasetField field;
private DatasetInterceptor interceptor;
public DatasetText(Dataset dataset, DatasetField field) {
this.dataset = dataset;
this.field = field;
this.init();
this.bind();
}
public DatasetText(DatasetField field) {
this(null, field);
}
private void init() {
setFieldLabel(field.getTitle());
setName(field.getName());
setWidth(field.getEditWidth());
if(dataset != null) {
this.addListener(new TextFieldListenerAdapter(){
@Override
public void onBlur(Field field) {
dataset.set(field.getName(), DatasetText.this.getText());
}
@Override
public void onFocus(Field field) {
DatasetText.this.selectText();
}
});
}
}
@Override
public void bind() {
if(this.dataset == null) return;
if(this.interceptor == null)
this.interceptor = new DatasetInterceptorFormAdapter(Constants.ACTION_MOVE){
@Override
public void doAction(Dataset dataset, Object params) {
Record rec = dataset.getRecordAtCursor();
if(rec != null)
DatasetText.this.setValue(rec.getAsString(field.getName()));
}
};
this.dataset.addInterceptor(this.interceptor);
Record rec = dataset.getRecordAtCursor();
if(rec != null)
this.setValue(rec.getAsString(field.getName()));
}
@Override
public void unbind() {
if(this.dataset == null) return;
this.dataset.removeInterceptor(this.interceptor);
}
@Override
public Dataset getDataset() {
return this.dataset;
}
@Override
public DatasetField getField() {
return this.field;
}
}