当只编码一个arg时,Jython java调用抛出异常请求2个args

时间:2010-06-18 06:59:16

标签: java python tomcat jython

我想在tomcat5上运行的Jython servlet中调用Java方法。它看起来像这样:

@SuppressWarnings("unchecked")
    public School loadByName(String name) {
        List<School> school;
        school = getHibernateTemplate().find("from " + getPersistentClass().getName() + " where name = ?", name);

        return uniqueResult(school);
    }

我在Jython中使用:

调用它
foobar = SchoolDAOHibernate.loadByName('University')

它抛出一个错误,说loadByName()需要2个args;得到1。 还有什么其他说法可以寻找?

如果我尝试先创建一个实例,例如:

foo = com.dc.sports.dao.hibernate.SchoolDaoHibernate()
foo.loadByName('University')

第一个电话会抛出异常说:

  

没有可见的类构造函数(com.dc.sports.dao.hibernate.SchoolDaoHibernate)

我假设这是因为它是私有包:

package com.dc.sports.dao.hibernate;

...

@SuppressWarnings("unchecked")
class SchoolDaoHibernate extends AbstractDaoHibernate<School> implements SchoolDao {

那么我怎么能得到这个方法呢?

2 个答案:

答案 0 :(得分:2)

loadByName不是静态的。 你需要一个实例来调用它。

sdh = SchoolDAOHibernate(...) # ... any args for construction ??
sdh.loadByName('Univeristy') # 2 args :-) self (sdh) and 'University'

更清楚?

答案 1 :(得分:1)

因为loadByName方法不是静态的,所以Jython可能期望第一个参数是SchoolDAOHibernate的实例。如果它对您的设计有意义,请将该方法设为静态。