java - 如何改进 ListGrid 服务器连接/数据源的 SmartGWT LGPL 实现?

标签 java tomcat datasource smartgwt listgrid

为了扩展我的问题,您可以说我想在 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 列数据库表中的数据。我不使用数据源(稍后会详细介绍),而是从异步服务获取数据并在成功时填充它,就像这样 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

最佳答案

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

关于java - 如何改进 ListGrid 服务器连接/数据源的 SmartGWT LGPL 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12330647/

相关文章:

jakarta-ee - 如何在 Wildfly 10 中以编程方式创建数据源?

java - 将时间戳变量添加到应用程序属性中的文件夹路径值

java - pythonic "a"* 10 的 java 等价物是什么?

tomcat - 我怎样才能发布WAR文件

asp.net - 是否有相当于 YUI、ASP.NET 或 Google DataSource 的 jQuery?

reporting-services - 替换 Reporting Services RDLC 报告的数据源

java - 与 Statement 相比,使用 PreparedStatement 有什么缺点吗

java - JSP + JavaScript + Servlet 意想不到的结果

java - HTML 和 CSS 引用跳出我的 Tomcat 上下文

Spring Boot war 文件适用于嵌入式但不适用于独立的 Tomcat