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);

したがって、この単純なコードは、products テーブルと client テーブルからすべてのデータを選択し、それをテーブルに配置します。しかし、たとえば、コンボボックスから選択した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特に問題はありませんが、文字列であればaddSlashesSQLInjection を回避するために注意してください。

于 2012-06-30T20:58:58.710 に答える