Festlegen einer listen indizierten Eigenschaft mit Beanutils
-
26-10-2019 - |
Frage
Ich versuche, beranutils zu verwenden, um mit einer Java -Bohne zu interagieren, ähnlich wie folgt:
public class Bean {
private List<Integer> prices = new LinkedList<Integer>();
public List<Integer> getPrices() {
return prices;
}
}
Laut dem Beanutils -Dokumentation, Beanutils unterstützt indizierte Eigenschaften, die sind List
s:
Als Erweiterung der JavaBeans -Spezifikation berücksichtigt das Beanutils -Paket jede Eigenschaft, deren zugrunde liegender Datentyp auch java.util.list (oder eine Implementierung der Liste) ist, die ebenfalls indiziert werden soll.
Nehmen wir jedoch an, ich versuche, so etwas wie Folgendes zu tun:
Bean bean = new Bean();
// Add nulls to make the list the correct size
bean.getPrices().add(null);
bean.getPrices().add(null);
BeanUtils.setProperty(bean, "prices[0]", 123);
PropertyUtils.setProperty(bean, "prices[1]", 456);
System.out.println("prices[0] = " + BeanUtils.getProperty(bean, "prices[0]"));
System.out.println("prices[1] = " + BeanUtils.getProperty(bean, "prices[1]"));
Die Ausgabe ist:
prices[0] = null
prices[1] = 456
Warum ist BeanUtils.setProperty()
Die indizierte Eigenschaft kann während nicht festgelegt werden, während PropertyUtils.setProperty()
kann? Unterstützt Beanutils keine Konvertierung von Typen für Objekte in Inside? List
s?
Lösung
BeanUtils
Benötigt eine Setter -Methode, damit es funktioniert. Dein Bean
Die Klasse fehlt die Settermethode für prices
, fügen Sie dies hinzu und machen Sie Ihren Code erneut, er sollte gut funktionieren:-
public void setPrices(List<Integer> prices) {
this.prices = prices;
}