为了扩展我的问题,您可以说我想在 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)。
我有一个 2 列 ListGrid,填充了 5 列数据库表中的数据。我不使用 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 数据源或 SmartGWT Pro(或更高版本)集成服务器编写的。
b) 如果其中一个插入失败,异步方法需要具有回滚机制,尽管可能有更智能的实现(例如,在一个事务中执行所有插入)。
c)我正在“破解”来获取和更新数据,而不是使用对象方法/属性,但这是目前我从 JavaDoc 中得到的最好的;我更愿意看到写这个和学习的最佳实践方式
我正在使用 SmartGWT LGPL 3.0、Tomcat 7.0、Java 1.6