0

スマートGWTでListGridに行を追加しようとしています。行が追加されていますが、値が表示されていません

public class SearchResultsView extends HLayout {
public SearchResultsView(EmployeeServiceAsync empServiceAsync) {
    final ListGrid employeeGrid = new ListGrid();
    employeeGrid.setWidth(500);
    employeeGrid.setHeight(224);
    employeeGrid.setShowAllRecords(true);

    ListGridField empIDField = new ListGridField("empID", "Employee Id");
    ListGridField empNameField = new ListGridField("empName",
            "Employee Name");

    employeeGrid.setFields(empIDField, empNameField);
                                // Employee[EmployeeData.getRecords().size()]);

    empServiceAsync.getRecords(new AsyncCallback<List<Employee>>() {

        @Override
        public void onSuccess(List<Employee> result) {
            System.out.println(result);
            /*
            Employee[] employee = result.toArray(new Employee[result.size()]);

            employeeGrid.setData(employee);*/
            EmployeeListGrid employeeListGrid[]=new EmployeeListGrid[result.size()];
            int counter=0;
            for (Employee employee : result) {
                employeeListGrid[counter]=new EmployeeListGrid(employee.getEmpID(), employee.getEmpName());
                System.out.println(employeeListGrid[counter].getEmpID()+">>"+employeeListGrid[counter].getEmpName());
                counter++;
            }
            employeeGrid.setData(employeeListGrid);

        }

        @Override
        public void onFailure(Throwable caught) {
            // TODO Auto-generated method stub

        }
    });

    this.addChild(employeeGrid);

}

}

説明>>サーバーにrpc呼び出しを行っているグリッドにデータを入力するために、サーバーはリストを返します。リストを反復処理し、タイプEmployeeListGridのオブジェクトの配列を作成します(EmployeeListGridがListGridRecordを拡張するため)。次に、作成したアレイを使用してemployeegridにフィードします。

ここで何かを見逃したことがありますが、グリッドに空の行が表示されるのはなぜですか?

「employeeListGrid」が正しく入力されていることをデバッグして確認しましたが、コンテンツがレンダリングされないことに注意してください。

4

1 に答える 1

0

注意点:フィールド名では大文字と小文字が区別されるため、データとフィールド名の大文字と小文字が一致していないかどうかを確認してください(「parentId」と「parentID」など) http://forums.smartclient.com/showthread.php?t=8159# aGrid

class SearchResultsView extends HLayout {
    public SearchResultsView() {
        final ListGrid employeeGrid = new ListGrid();
        employeeGrid.setWidth(500);
        employeeGrid.setHeight(224);
        employeeGrid.setShowAllRecords(true);

        ListGridField empIDField = new ListGridField("empID", "Employee Id");
        ListGridField empNameField = new ListGridField("empName", "Employee Name");

        employeeGrid.setFields(empIDField, empNameField);

        // using a timer to simulate async callback, grid will populate after 2.5 seconds
        // place code inside run() method in onSuccess()
        Timer timer = new Timer() {
            @Override
            public void run() {
                RecordList recordList = employeeGrid.getRecordList();

                List<Employee> employeeList = getEmployeeList();
                for (Employee employee : employeeList) {
                    recordList.add(new EmployeeRecord(employee.empID, employee.empName));
                }
            }
        };

        timer.schedule(2500);

        this.addChild(employeeGrid);
    }

    private List<Employee> getEmployeeList() {
        List<Employee> employeeList = new ArrayList<Employee>();
        employeeList.add(new Employee("1", "AAA"));
        employeeList.add(new Employee("2", "BBB"));
        employeeList.add(new Employee("3", "CCC"));
        employeeList.add(new Employee("4", "DDD"));

        return employeeList;
    }
}

class Employee {
    String empID;
    String empName;

    Employee(String empID, String empName) {
        this.empID = empID;
        this.empName = empName;
    }
}

class EmployeeRecord extends ListGridRecord {

    EmployeeRecord(String empID, String empName) {
        setAttribute("empID", empID);
        setAttribute("empName", empName);
    }
}

以下に示すように、ListGrid.setData()を使用することができます。

List<Employee> employeeList = getEmployeeList();

if (employeeList != null && employeeList.size() > 0) {
    EmployeeRecord[] employeeRecords = new EmployeeRecord[employeeList.size()];
    for (int i = 0; i < employeeList.size(); i++) {
        employeeRecords[i] = new EmployeeRecord(employeeList.get(i).empID, employeeList.get(i).empName);
    }

    employeeGrid.setData(employeeRecords);
}

十分な理由がない限り、EmployeeRecord(EmployeeListGrid)クラスは必要ない場合があります。私はあなたのコードと私のコードの違いを減らすためにそれを使用しました。

コードを最小化していない場合でも、適切なアクセス修飾子を使用する必要があります。

于 2013-03-26T22:00:48.240 に答える