我想在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 {
那么我怎么能得到这个方法呢?
答案 0 :(得分:2)
loadByName不是静态的。 你需要一个实例来调用它。
sdh = SchoolDAOHibernate(...) # ... any args for construction ??
sdh.loadByName('Univeristy') # 2 args :-) self (sdh) and 'University'
更清楚?
答案 1 :(得分:1)
因为loadByName
方法不是静态的,所以Jython可能期望第一个参数是SchoolDAOHibernate
的实例。如果它对您的设计有意义,请将该方法设为静态。