Domanda

Ho un problema di implementare DropDowiceChaice nel mio codice.Voglio visualizzare un elenco di oggetto di tipo ProductCategory.Questo è tutto bene e va bene, ma quando provo a salvare il modulo, l'intero oggetto ProductCategory viene salvato e non solo il campo dall'oggetto che viene visualizzato nell'elenco Seleziona.

Ecco come è il mio codice:

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

L'HTML generato sembra qualcosa del genere:

<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>
.

Il campo "ProductCategory" esiste in un oggetto di tipo "Prodotto" ed è di tipo String.

come ho provato a descrivere;Voglio salvare ProductCategory.GetName () al campo "ProductCategory" nel prodotto, e non l'intero oggetto ProductCategory. In altre parole: Voglio salvare "Test1" su Product.ProductCategory, ma invece salva com.test.webapp.domain.productCategory@1.

può qualcuno per favore dire come è fatto?

Qualsiasi aiuto è molto apprezzato.

È stato utile?

Soluzione

Il tuo problema è che l'oggetto del modello dietro il DDC è di tipo ProductCategory.Su Salva, questo verrà lanciato sul tipo di stringa - come definito nell'oggetto modello dietro il modulo.

cambierei il codice per avere solo stringhe nella tua lista di scelta.

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

Fare così, puoi anche sbarazzarti del tuo rendering di scelta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top