getItemProperty returns not null - Vaadin bug?

天涯浪子 提交于 2019-12-13 00:32:22

问题


I need help, maybe I am blind. Here is a fragment of my code:

System.out.println("itemPropertyIDS="+item.getItemPropertyIds().toString());
System.out.println("argname="+argName);
Property<?> p = item.getItemProperty(argName);
if (p != null) {
    System.out.println("p="+p.toString());
    return p.getValue();
}

// Continue ...

It returns a currious null value instead of continue, even if the propertyId doesn't exists.
This is written on my console:

itemPropertyIDS=[iconName, iconResource, nodeType, nodeValue, nodeName, handler, nodeData]
argname=Lab
p=com.vaadin.data.util.IndexedContainer$IndexedContainerProperty@12967

The first row shows list of property names.
I expected getTtemProperty must return null, but not.


The item comes from IndexedContainer.


Can you help me? Any idea? Thanky You.


回答1:


I tested your code and indeed - property p is not null even though property doesn't exist in IndexedContainer. Reading the comments of Vaadin ticket pasted by kris54321, it makes sense not fixing the bug as some applications may rely on that feature. Fixing the bug may break those apps.

Possible workarounds for this problem:

Check directly the propertyId-collection if property exists in the container:

if(item.getItemPropertyIds().contains(argName) {
    Property<?> p = item.getItemProperty(argName);
    System.out.println("p="+p.toString());
    return p.getValue()
}

Change the logic to check property value

if(item.getItemProperty(argname).getValue() != null) }
    //Do things
{



回答2:


I was forced to make workaround using "item.getItemPropertyIds().contains(argName)". For me, the priority is to check whether the item contains the value (null possible) or not. If yes then I use the value (can be null) else another activity is done.

If they dont want to fix the bug due to application using the bug, then the documentation should be fixed, else all novices in Vaadin (as I am) will be confused.
The implementation in IndexedContainer$IndexedContainer is wrong:

 @Override
 public Property getItemProperty(Object id) {
        return new IndexedContainerProperty(itemId, id);
 }

This can never return null as the documentation says.



来源:https://stackoverflow.com/questions/26164040/getitemproperty-returns-not-null-vaadin-bug

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!