为什么ListView JSP标记序列化整个数据对象?

时间:2018-03-13 11:37:54

标签: listview kendo-ui

ListViewTag类将整个数据对象序列化,即使这些字段未在ListView中使用。我正在使用一个Hibernate实体,它使用多对多关系中的对象列表,我只想在需要时检索它们。当Serializer类尝试序列化对象时,Hibernate会尝试填充列表,但它不能,因为没有打开数据库会话。

com.kendoui.taglib.json.Serializer是否有任何方法可以忽略字段?

请参阅堆栈跟踪:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.syngenta.combichem.model.CcwEnumeration.buildingBlocks, could not initialize proxy - no Session
    org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:575)
    org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:214)
    org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554)
    org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142)
    org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:180)
    com.kendoui.taglib.json.Serializer.serializeIterable(Serializer.java:171)
    com.kendoui.taglib.json.Serializer.serialize(Serializer.java:109)
    com.kendoui.taglib.json.Serializer.serializeMap(Serializer.java:158)
    com.kendoui.taglib.json.Serializer.serialize(Serializer.java:121)
    com.kendoui.taglib.json.Serializer.serializeIterable(Serializer.java:174)
    com.kendoui.taglib.json.Serializer.serialize(Serializer.java:109)
    com.kendoui.taglib.json.Serializer.serializeMap(Serializer.java:158)
    com.kendoui.taglib.json.Serializer.serialize(Serializer.java:113)
    com.kendoui.taglib.json.Serializer.serializeMap(Serializer.java:158)
    com.kendoui.taglib.json.Serializer.serialize(Serializer.java:111)
    com.kendoui.taglib.WidgetTag.script(WidgetTag.java:101)
    com.kendoui.taglib.WidgetTag.doEndTag(WidgetTag.java:61)
    com.kendoui.taglib.ListViewTag.doEndTag(ListViewTag.java:82)

2 个答案:

答案 0 :(得分:0)

不幸的是,Serializer类不提供跳过属性的功能。您可以查看序列化的源代码:

https://github.com/telerik/kendo-ui-core/blob/a2c7ec547302c4741103f1f1bb034b57eb201f45/wrappers/java/kendo-taglib/src/main/java/com/kendoui/taglib/json/Serializer.java#L97

解决这个问题的一种方法是创建一个ViewModel(或者在你的情况下是几个ViewModel),它只包含必需的属性。

我希望这会有所帮助。

答案 1 :(得分:-1)

创建一个包含该字段必需的所有属性的类