DynaBeans を (文字列) キーが強制的に小文字に変換されるマップに変換するために、私がその間に考案したクイック/ダーティな方法を次に示します。
private Map asLowerCaseIndexedMap(DynaBean bean) {
Map lowerCaseIndexedMap = new HashMap();
DynaProperty[] dynaProperties = bean.getDynaClass().getDynaProperties();
for (int i=0, n=dynaProperties.length; i<n; i++) {
String propertyName = dynaProperties[i].getName();
lowerCaseIndexedMap.put(propertyName.toLowerCase(), bean.get(propertyName));
}
return lowerCaseIndexedMap;
}
残念ながら、これにより、他のフープを飛び越える必要がありました。私はこのように豆を扱っていましたが、
public void header(List<DynaBean> headerColumns) throws WriteException {
for (DynaBean column : headerColumns) {
int col = (Integer)column.get("columnNumber");
int width = (Integer)column.get("columnWidth");
//etcetera
今、私はこの方法でそうしなければなりません:
public void header(List<DynaBean> headerColumns) throws WriteException {
for (DynaBean column : headerColumns) {
/*
* RowSetDynaClass returns beans with lower case properties by default
* but this is not guaranteed if beans are coming from Hibernate.
*
* Converting from the bean to a map however loses DynaBeans' inherent
* type conversions, which in turn entails the converting back and forth
* from String, to BigDecimal, to int as seen below
*/
Map columnMap = asLowerCaseIndexedMap(column);
int col = (new BigDecimal(columnMap.get("columnnbr").toString())).intValue();
int width = (new BigDecimal(columnMap.get("columnwdth").toString())).intValue();