我有一个Map<String, Boolean>
,我想从via BeanEditor编辑值。
我一直在四处寻找,并认为我需要为它创建自己的属性管道:
public class MapPropertyConduit implements PropertyConduit {
private Object key;
@SuppressWarnings("rawtypes")
private Class dataType;
@SuppressWarnings("rawtypes")
public MapPropertyConduit(Object key, Class dataType) {
this.key = key;
this.dataType = dataType;
}
@Override
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
return null;
}
@SuppressWarnings("rawtypes")
@Override
public Object get(Object instance) {
return ((Map) instance).get(key);
}
@SuppressWarnings("unchecked")
@Override
public void set(Object instance, Object value) {
((Map) instance).put(key, value);
}
@SuppressWarnings("rawtypes")
@Override
public Class getPropertyType() {
return dataType;
}
}
我像这样初始化它:
this.reportingModel = beanModelSource.createEditModel(Map.class, messages);
MViewTransactionDisplayModel selectedModel = getMViewTransactionReportModel();
Map<String, Boolean> displayFields = selectedModel.getDisplayModel();
for (Entry<String, Boolean> entry : displayFields.entrySet()) {
this.reportingModel.add(entry.getKey(), new MapPropertyConduit(entry.getKey(), Boolean.class)).dataType(Boolean.class.getName());
}
在tml
我做了这个:
<t:beaneditor t:id="mapEditorId" t:object="myMap" t:model="reportingModel"/>
我得到的例外是:
Render queue error in BeginRender[MyPage:mapeditorid.propertyeditor]: Unable to locate a block to edit property 'property1' (with data type 'java.lang.Boolean') of object {property1=true, property2=true, property3=true, property4=true, property5=true, property6=true, property7=true, property8=true, property9=true, property10=true, property11=true, property12=true, property13=true}: There is no defined way to edit data of type 'java.lang.Boolean'. Make a contribution to the BeanBlockSource service for this type.
我有点困惑,因为我觉得我可以用一个简单的复选框来编辑Boolean
。
或者是,或者我提供/调用自定义属性管道失败了?
有没有办法解决这个问题,以便我可以自由编辑地图中的值?
答案 0 :(得分:1)
当我改变时
this.reportingModel.add(entry.getKey(), new MapPropertyConduit(entry.getKey(), Boolean.class)).dataType(Boolean.class.getName());
到
this.reportingModel.add(entry.getKey(), new MapPropertyConduit(entry.getKey(), Boolean.class)).dataType("boolean");
它突然起作用了。
有没有人有完整的可用数据类型列表?
答案 1 :(得分:0)