私は:
- クライアントクラス
- リストビュー
- テキストフィールド
テーブルを作成するには、ListViewにデータを入力する必要があります。
作業コード:
clientModel = new LoadableDetachableModel() {
@Override
protected Object load() {
return Client.getClientListByCompanyName(searchClientInput.getValue());
}
};
searchClientInput.setModel(new Model<String>());
searchClientInput.add(new AjaxFormComponentUpdatingBehavior("onkeyup") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.add(clientListViewContainer);
}
});
clientListView = new ListView<Client>(CLIENT_ROW_LIST_ID, clientModel) {
@Override
protected void populateItem(ListItem<Client> item) {
Client client = item.getModelObject();
item.add(new Label(CLIENT_ROW_COMPANY_CNPJ_ID, client.getCompanyName()));
item.add(new Label(CLIENT_ROW_COMPANY_NAME_ID, client.getCompanyCnpj()));
}
};
clientListViewContainer.setOutputMarkupId(true);
clientListViewContainer.add(clientListView);
add(clientListViewContainer);
これで、HTMLにTextFieldがあります。ユーザーがこのTextFieldに何かを入力するたびに、入力した内容がデータベースで選択されます。したがって、単語ごとに選択が行われ、テーブルを更新する必要があります。AJAXとおそらくモデルを使用する必要があると思います。私はこれをどのように行うことができるかについて少し迷っています。誰かが私に例を提供してくれるなら、私は非常に感謝するでしょう。
編集:例外をスローしている新しいコード:Last cause: Attempt to set model object on null model of component: searchClientForm:searchClientInput
編集2:わかりました。例外は、TextFieldにデータをバインドするモデルがなかったことです。だから私がしたことは:searchClientInput.setModel(new Model<String>());
イベントにも問題がありました。使用onkeydown
は機能していましたが、意図したとおりではありませんでした。私は会社名1-4を持っていました。会社名1を入力した場合、テーブルが更新されるように、もう一度1つのキーを押す必要があります。これonkeyup
では起こりません。助けてくれてありがとう。