0

为了扩展我的问题,您可以说我想在 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

4

1 回答 1

2

您可以使用自定义数据源。DataSource.setDataFormat(DSDataFormat.CUSTOM)。使用此设置,DataSource 将不会处理响应,而是您必须使用 transformResponse() 解析它。

于 2012-09-13T12:30:42.703 回答