我正在尝试使用我的应用程序(java 1.8)中的pojos设置脚本数据源。 我通过maven在我的应用程序中嵌入了一个reportengine(4.4.0),并创建了一个带有脚本数据的报告。报告中可以看到pojos。
bookSrv = Packages.de.me.service.ReportDataService;
作品。
我可以访问我的对象的静态方法,但无论我尝试什么,访问公共方法或字段都会导致异常。
所以
books = bookSrv.books;
给出
org.mozilla.javascript.EvaluatorException:Java类“de.me.service.ReportDataService”没有名为“books”的公共实例字段或方法。 (/报告/数据集/脚本数据集[@ ID = “5”] /方法[@名称= “开放”]#11) 或
books = bookSrv.showMyBooks('Peter');
给出
org.mozilla.javascript.EvaluatorException:Java类“de.my.service.ReportDataService”没有名为“showMyBooks”的公共实例字段或方法。 (/报告/数据集/脚本数据集[@ ID = “5”] /方法[@名称= “开放”]#11)
可是:
books = Packages.me.tdesk.service.ReportDataService.myBooksStatic('Peter');
像预期的那样工作。 (只是围绕我的方法的静态包装)
这是我的java类:
package de.me.service;
import de.me.model.dto.BookDto;
import java.util.ArrayList;
import java.util.List;
public class ReportDataService {
public ReportDataService() {
books = showMyBooks("Peter");
System.out.println("ReportDataService.init()");
}
private List<BookDto> books;
public List<BookDto> getBooks() {
return books;
}
public void setBooks(List<BookDto> books) {
this.books = books;
}
public List<BookDto> showMyBooks(String commodity){
BookDto dto = new BookDto(12l, "otto", "My", 12l);
List<BookDto> books = new ArrayList<>();
books.add(dto);
dto = new BookDto(122l, "paul", "My", 122l);
books.add(dto);
return books;
}
public static List<BookDto> myBooksStatic(String commodity){
ReportDataService rep = new ReportDataService();
return rep.showMyBooks(commodity);
}
}
非常感谢 乌利
答案 0 :(得分:0)
嗯...
不应该是
bookSrv = new Packages.de.me.service.ReportDataService(...);
而不是
bookSrv = Packages.de.me.service.ReportDataService;
对于第二个,bookSrv将是Java 类 ReportDataService(它是Rhinoscript中的一个对象),而不是该类的实例。