Wicket DropDownChoiceは、フィールドの代わりにデータベースにオブジェクトを保存します
-
12-12-2019 - |
質問
私のコードにDropDownChoiceを実装する問題があります。ProductCategory型のオブジェクトのリストを表示します。これはすべて元気で元気ですが、フォームを保存しようとすると、ProductCategoryオブジェクト全体が保存され、選択リストに表示されるオブジェクトからのフィールドだけではありません。
これは私のコードがどのように見えるものです:
IModel categories = new LoadableDetachableModel() {
public List<ProductCategory> load() {
List<ProductCategory> l = categoryService.findAllProducts();
return l;
}
};
IChoiceRenderer renderer = new IChoiceRenderer() {
public Object getDisplayValue(Object obj) {
ProductCategory category = (ProductCategory) obj;
return category.getName();
}
public String getIdValue(Object obj, int index) {
ProductCategory category = (ProductCategory) obj;
return category.getName();
}
};
DropDownChoice<ProductCategory> listCategories = new DropDownChoice<ProductCategory>(
"productCategory",
categories,
renderer
);
add(listCategories);
.
生成されたHTMLは次のようになります:
<select wicket:id="productCategory" name="productCategory">
<option selected="selected" value="">Vælg en</option>
<option value="test1">test1</option>
<option value="test2">test2</option>
</select>
.
「ProductCategory」フィールドは、 "Product"と型のオブジェクトに存在し、文字列型です。 説明しようとしたように
ProductCategory.GetName()を製品の「ProductCategory」フィールドに保存し、ProductCategoryオブジェクト全体ではありません。 つまり、「TEST1」をProduct1」に保存したいが、代わりにCom.test.WebApp.Domain.productcategory @ 1を保存したい。
誰かがこれがどのように行われるかを教えてください。
あらゆる助けが大いに評価されています。
解決
あなたの問題はDDCの背後にあるモデルオブジェクトがProductCategory型であることです。保存時に、これはFormの背後にあるモデルオブジェクトで定義されているように、文字列型にキャストされます。
あなたの選択リストに文字列のみを持つようにコードを変更します。
public List<String> load() {
List<String> pcChoices = new ArrayList<String>();
for(ProductCategory pc : categoryService.findAllProducts()) {
pcChoices.add(pc.getName());
}
return pcChoices;
}
.
そうすることも、あなたはあなたの選択レンダラーを取り除くことができます。
所属していません StackOverflow