[Opensource] What is the difference between getValues and getValidValues

Ivan Ivanov rambiusparkisanius at yahoo.com
Mon Apr 5 05:35:58 PDT 2004


Hi friends, 

Can you please give more explanantions about
DBObject.getValues and DBObject.getValidValues?
I spent some time dealing with multivalued fields and
their lookup objects and I feel I am missing
something. My situation is the same as
Employee-Department example in edg (in fact I write my
code guided by this example):

public MyDBobject extends SecuredDBObject {
...
    public void setupFields() throws DBException {
        addField("ID", "auto-inc", 0, false, "The id
");
        addField("NAME_ID", "integer", 0, false, "The
name");
        addKey("ID");
        setMultiValued("NAME_ID");
       
setLookupObject("com.mypackage.dbobject.MyLookupDBObject");
    } 
}

and MyLookupDBObject looks like:

public MyLookupDBObject extends SecuredDBObject {

    public void setupFields() throws DBException {
        addField("NAME_ID", "auto_inc", 0, false, "The
name id");
        addField("VALUE", "varchar", 255, false, "The
value of the name");
        addKey("NAME_ID");
    }

    public Vector getValidValues(String fieldName)
throws DBException {
        if (fieldName.equals("NAME_ID")) {
            return getValuesDefault("NAME_ID",
"VALUE");   
        }
        return super.getValidValues(fieldName);
     }
}

when I run this piece of code with DBMaint
http://localhost:8080/myproject/DBMaint.do?&dbobj=com.mypackage.dbobject.MyDBObject&state=Add
expecting to see a nice combo box with values for
NAME_ID, I receive this error
This object: com.mypackage.dbobject.MyLookupObject
does not have valid values defined
and the stack trace.

However, when I remove getValidValues() method from
MyLookupObject and add method getValues():
    public Vector getValues() throws DBException {
        Vector values = getValuesDefault("NAME_ID",
"VALUE");
        return values;
    }

everything goes just fine and DBMaint shows the combo
box.

So why getValues() work and getValidValues() (as shown
in edg) not?

Thank you very much in advance
Ivan Ivanov

P.S. I spotted two minor mistakes in expresso docs
(they are still in CVS):
1) in expresso/doc/intro/caching.html in the sentence
"The actual class that controls the caching is called
the CacheManger and call be found in the expresso tree
underunder expresso/core/cache/CacheManager" under is
spelled twice
2) in Chapter 5. Database Objects in the following
code:
    public Vector getValidValues(String fieldName) 
         throws DBException {
  
        if (fieldName.equals("Dept_Id")) {
	    Vector myValue = this.getValuesDefault(
			"Dept_Id", "Dept_Name" ); 
            return myValues;
        }
        return super.getValidValues(fieldName);
    }
    
instead of "return myValues" should be "return myValue";

__________________________________
Do you Yahoo!?
Yahoo! Small Business $15K Web Design Giveaway 
http://promotions.yahoo.com/design_giveaway/



More information about the Opensource mailing list