私の質問を拡張すると、SmartGWT にプログラミングする代わりに、SmartGWT でプログラミングしたいと言うことができます ( http://msmvps.com/blogs/jon_skeet/archive/2008/04/23/programming-quot-in-quot-a -language-vs-programming-quot-into-quot-a-language.aspx )。
5 列のデータベース テーブルからのデータが入力された 2 列の ListGrid があります。私は DataSource を使用しません (これについては後で詳しく説明します)。代わりに、非同期サービスからデータを取得し、成功時にこのように入力しpredmetiGrid.setData(PredmetRecord.convertToContractRecordArray(result));
ます。ユーザーはデータを編集し、[保存] ボタンを押して保存できます。保存を実装した方法は次のとおりです。
// repeat this for each edited field
for (int i=0; i < predmetiGrid.getAllEditRows().length; i++){
int editedRowIndex = predmetiGrid.getAllEditRows()[i];
// for each edite get the full record
PredmetRecord editedRecord = (PredmetRecord)predmetiGrid.getRecord(editedRowIndex);
// create a new DomainObject - Predmet, and set the ID from the
// Row so I have the ID to use for update later
Integer predmetID = editedRecord.getAttributeAsInt("predmetID");
Predmet predmet = new Predmet(predmetID);
// fill Predmet object with either the edited value, or the
// original value (if only one of the fields was changed and not both)
String editedNazivPredmeta = (String)predmetiGrid.getEditValues(editedRecord).get("nazivPredmeta");
boolean isNazivChanged = editedNazivPredmeta != null;
if (!isNazivChanged){
editedNazivPredmeta = editedRecord.getAttribute("nazivPredmeta");
}
predmet.setNazivPredmeta(editedNazivPredmeta);
String editedOpisPredmeta = (String) predmetiGrid.getEditValues(editedRecord).get("opisPredmeta");
boolean isOpisChanged = editedOpisPredmeta != null;
if (!isOpisChanged){
editedOpisPredmeta = editedRecord.getAttribute("opisPredmeta");
}
predmet.setOpisPredmeta(editedOpisPredmeta);
predmetiList.add(predmet);
}
別の方法では、非同期サービスを呼び出します。
public void updatePredmeti(List<Predmet> predmeti) throws RpcException, IllegalArgumentException {
for (int i=0; i<predmeti.size();i++){
JdbcPredgledPredmetaDAO.getInstance().updatePredmet(predmeti.get(i));
}
}
現在、この実装にはいくつかの問題があります。最も明白なものは次のとおりです。
a) ListGrid に接続されたデータソースを使用していません。例は XML DataSource または SmartGWT Pro (またはそれ以上) 統合サーバー用に書かれているため、私の場合の使用方法がわからないため、使用しません。
b) 非同期メソッドには、挿入の 1 つが失敗した場合のロールバック メカニズムが必要ですが、これをよりスマートに実装することもできます (たとえば、1 つのトランザクションですべての挿入を行う)。
c)オブジェクトのメソッド/プロパティを使用する代わりに、データを取得および更新するために「ハッキング」していますが、これは現在、JavaDocから得た最高のものです。これを書いて学ぶためのベストプラクティスの方法を見たいと思います
SmartGWT LGPL 3.0、Tomcat 7.0、Java 1.6 を使用しています