1

我需要一个基于 Vaadin 的简单应用程序的帮助。

我需要有一个绑定到 SQL 查询结果的表。SQL 查询有一个参数,用户从组合框中选择该参数。我需要的是在用户更改组合框值时刷新表格。

这就是我所拥有的():

 Table table;
 JDBCConnectionPool pool;
 String query = "select products.product_code, products.name as product_name, clients.client_code,  clients.name as client_name from products, clients where products.client_id = clients.id";

 FreeformQuery q = new FreeformQuery(query, pool);
 SQLContainer container = new SQLContainer(q);
 table.setContainerDataSource(container);

因此,这个简单的代码从产品和客户表中选择所有数据并将其放入表中。但是,例如,如何通过从组合框中选择的 clients.client_id 添加过滤?要实现下一个查询:

 select products.product_code, products.name as product_name, clients.client_code,  clients.name as client_name from products, clients where products.client_id = clients.id where client_id = ?;

感谢您的帮助。

4

1 回答 1

2

您可以添加一个Property.ValueChangeListener会更改您的查询参数的:

comboBox.addListener(new Property.ValueChangeListener() {
    public void valueChange(ValueChangeEvent event) {
        String customQuery = query.replace(":clientId", ((Client)(event.getProperty()).getId(), pks);
        table.setContainerDataSource(new SQLContainer(new FreeformQuery(customQuery, pool)));
    }
});

并且query将保持以下值:select products.product_code, products.name as product_name, clients.client_code, clients.name as client_name from products, clients where products.client_id = clients.id where client_id = :clientId

但是要小心query.replace,如果Id是int没什么好担心的,但如果是字符串,请addSlashes避免SQLInjection。

于 2012-06-30T20:58:58.710 回答