Ich bin mir nicht sicher, ob dies ein komplexes Problem ist, aber als Startperson scheint mir das etwas komplex zu sein. Ich habe ein Objekt, basierend auf dem ich einige Werte auf der Benutzeroberfläche anzeigen und Benutzer einige auswählen müssen, muss ich Daten an einen anderen Controller zurücksenden, wenn Benutzer auf die Schaltfläche Senden klicken. Hier ist die Struktur meines DatenobjektsBindung einer Liste von Listen im Frühjahr MVC
public class PrsData{
private Map<String, List<PrsCDData>> prsCDData;
}
public class PrsCDData{
private Map<String, Collection<ConfiguredDesignData>> configuredDesignData;
}
public ConfiguredDesignData{
// simple fields
}
ich habe das Objekt im Modell festgelegt, bevor die Ansicht wie
model.addAttribute("prsData", productData.getPrData());
in Form zeigt, ich habe folgende Einstellungen
<form:form method="post" commandName="prsData" action="${addProductToCartAction}" >
<form:hidden path="prsCDData['${prsCDDataMap.key}']
[${status.index}].configuredDesignData['${configuredDesignDataMap.key}']
[${configuredDesignDataStatus.index}].code"/>
<form:hidden path="prsCDData['${prsCDDataMap.key}']
[${status.index}].configuredDesignData['${configuredDesignDataMap.key}']
[${configuredDesignDataStatus.index}].description"/>
</form:form>
Das ist, was ich
public String addToCart(@RequestParam("productCodePost") final String code,
@ModelAttribute("prsData") final PrsData prsData, final Model model,
@RequestParam(value = "qty", required = false, defaultValue = "1") final long qty)
Auf Absenden des Formulars Ausnahme
folgende ich bin immer beiAddProductToCartController
haben
org.springframework.beans.NullValueInNestedPathException: Invalid property 'prsCDData[Forced][0]'
of bean class [com.product.data.PrsData]:
Cannot access indexed value of property referenced in indexed property path 'prsCDData[Forced][0]': returned null
Es scheint, wie seine Werte auf diesem Controller zuzugreifen versuchen, während ich versuche, Wert zu senden zu diesem Controller und versuchen, gleiches Objekt mit ausgewählten Werten
Kann jemand mir sagen, zu schaffen, wo ich falsch mache und was ich brauche von
kümmernbearbeiten
Ich habe einige mehr Forschung und kam zu wissen, dass Frühling nicht unterstützen Autofüllfunktion Liste/Karte für benutzerdefinierte Objekte und auf der Grundlage der Antwort, die ich versuchte Implementierung zu ändern wie
public class PrsData{
private Map<String, List<PrsCDData>> prsCDData;
// lazy init
public PrsData()
{
this.prsCDData = MapUtils.lazyMap(new HashMap<String, List<PrsCDData>>(),
FactoryUtils.instantiateFactory(PrsCDData.class));
}
}
public class PrsCDData{
private Map<String, Collection<ConfiguredDesignData>> configuredDesignData;
public PrsCDData()
{
this.configuredDesignData = MapUtils.lazyMap(new HashMap<String,
List<ConfiguredDesignData>>(),
FactoryUtils.instantiateFactory(ConfiguredDesignData.class));
}
}
aber ich bin immer folgende Ausnahme
org.springframework.beans.InvalidPropertyException:
Invalid property 'prsCDData[Forced][0]' of bean class [com.data.PrsData]:
Property referenced in indexed property path 'prsCDData[Forced][0]'
is neither an array nor a List nor a Set nor a Map;
returned value was [[email protected]]
ich bin nicht sicher was, was ich falsch mache, scheint es, dass entweder mein JSTL Ausdruck ist nicht richtig
Eine andere Sache zu achten gilt in diesem Szenario verschachtelte Klassen ist. Wenn Sie 'PrsCDData' zu einer Top-Level-Klasse machen, können Sie dieses Problem vermeiden. –