1

コードに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」タイプのオブジェクトに存在し、Stringタイプです。

私が説明しようとしたように; ProductCategoryオブジェクト全体ではなく、ProductCategory.getName()をProductの「productCategory」フィールドに保存したいと思います。つまり、「test1」をProduct.productCategoryに保存したいのですが、代わりにcom.test.webapp.domain.ProductCategory@1を保存します。

誰かがこれがどのように行われるか教えてもらえますか?

どんな助けでも大歓迎です。

4

1 に答える 1

3

問題は、ddcの背後にあるモデルオブジェクトのタイプがProductCategoryであるということです。保存時に、これは文字列型にキャストされます-フォームの背後にあるモデルオブジェクトで定義されています。

選択リストに文字列のみが含まれるようにコードを変更します。

    public List<String> load() {
        List<String> pcChoices = new ArrayList<String>();
        for(ProductCategory pc : categoryService.findAllProducts()) {
            pcChoices.add(pc.getName());
        }
        return pcChoices;
    }

そうすることで、選択したレンダラーを取り除くこともできます。

于 2012-03-12T13:12:24.103 に答える