在使用hibernate作为datasource的情况下,有两种方法。
第一种是我最开始用的办法,比较普通,也比较土。使用RPC来进行校验,在提交之前,使用RPC的调用。
XxxxRemoteService.Util.getInstance().isFileNameValid( form.getValueAsString( "name"), new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
if ( result) {
form.saveData();
okClick();
} else Window.alert( "该文件无法创建,模板文件不存在,请先上传该类型的模板文件。");
}
@Override
public void onFailure(Throwable caught) {
Window.alert( "该文件无法创建,请参考日志文件。");
}
});
第二种方法,则是利用 SmartGWT EE 里面提供的 HibernateDataSource机制,继承自HibernateDataSource,
然后在其中的validateDSRequest方法当中进行校验。首先 ds.xml文件当中要设上
serverConstructor="org.simon.xxx.server.docs.XxxxxDataSource"
然后代码里面:
@Override
public DSResponse validateDSRequest(DSRequest request) throws Exception {
DSResponse response = super.validateDSRequest(request);
if ( !"add".equals( request.getOperationType())) return response;
if ( response == null) response = new DSResponse();
ErrorReport errorReport = response.getErrorReport();
if ( errorReport == null) {
errorReport = new ErrorReport();
response.setErrorReport( errorReport);
}
File templateFile = new File( SvnUtils.getTemplateFile(
StringUtils.getFilenameExtension( (String) request.getValues().get( "name"))));
if ( !templateFile.exists()) {
errorReport.addError( "name", new ErrorMessage( "该文件类型不存在,请上传该类型的模板"));
response.setStatus( DSResponse.STATUS_VALIDATION_ERROR);
} else return null;
return response;
}