gpt4 book ai didi

java - 可变 BasicDynaBean 映射

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:41 25 4
gpt4 key购买 nike

正如我在邮件主题中提到的,我遇到了 BasicDynaBean 内不可变映射的问题。据我所知,这是该 map 的默认行为。我想做的是,简单地从数据库检索结果集,这将创建一个包含 DynaBeans 的列表。对于查看数据库表,一切正常,当我尝试编辑它时出现问题并出现以下异常:

Caused by: javax.el.PropertyNotWritableException
at javax.el.MapELResolver.setValue(MapELResolver.java:267)
at com.sun.faces.el.DemuxCompositeELResolver._setValue(DemuxCompositeELResolver.java:255)
at com.sun.faces.el.DemuxCompositeELResolver.setValue(DemuxCompositeELResolver.java:281)
at com.sun.el.parser.AstValue.setValue(AstValue.java:201)
at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:291)
at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:131)
... 50 more

我认为,这是因为 dyna bean 内的 map 不可变。我认为一种选择是通过编辑 BeanUtils 库的源代码来更改 map 的默认行为。另一方面,我认为这个库的实现者一定以某种方式想到了这个功能......下面是我用来检索 DynaBeans 结果集的代码片段。

    String query = "SELECT * FROM test.a";

Statement stmt = (Statement) con.createStatement();
ResultSet rs = stmt.executeQuery(query);
RowSetDynaClass rsdc = new RowSetDynaClass(rs);

rs.close();
stmt.close();
dynaObjectList= rsdc.getRows();

我也尝试使用 LazyDynaMap,编辑表格效果很好,但是 map 不允许我放置多个数据,因为该键对于其他数据集来说不是唯一的。因为关键是属性名称。

如果您给我建议,我将不胜感激。提前致谢。如果可能的话,我真的很期待看到答案。此致。埃尔坎·坎利尔

最佳答案

默认情况下,BasicDynaBean 具有 DynaBeans 的可变映射。我创建了另一个由 LazyDynaMap 不可变的 map 并解决了问题。希望这对其他人有帮助。

setDecoratedDynaObjectList(rsdc.getRows());
Iterator<DynaBean> it=decoratedDynaObjectList.iterator();
while(it.hasNext()){
BasicDynaBean dynaBean = (BasicDynaBean) it.next();
Map<String,Object> modifiableMap=new DynaBeanPropertyMapDecorator(dynaBean, false);
DynaBean mutableDynaBean=new LazyDynaMap(modifiableMap);
modifiableDynaObjectList.add(mutableDynaBean);
}

关于java - 可变 BasicDynaBean 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30988804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com