在aspectJ文件中,默认情况下,以下查找器被编码为检索所有对象,在我的案例中报告。
uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
它具有以下参数:firstResult、sizeNo、sortFieldName、sortOrder。 插入列表方法后,这是原始代码:
@RequestMapping(produces = "text/html")
public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {
if (page != null || size != null) {
int sizeNo = size == null ? 10 : size.intValue();
final int firstResult = page == null ? 0 : (page.intValue() - 1) * sizeNo;
uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
float nrOfPages = (float) Report.countReports() / sizeNo;
uiModel.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages));
} else {
// uiModel.addAttribute("reports", Report.findAllReports(sortFieldName, sortOrder));
uiModel.addAttribute("reports", Report.findReportsByActiveEquals(1, sortFieldName, sortOrder).getResultList());
}
addDateTimeFormatPatterns(uiModel);
return "reports/list";
}
在我的列表中,我只想显示 Activity 报告。
所以在 Spring Roo 控制台中我添加了:finder add --finderName findReportsByActiveEquals
现在我可以选择:
- Report.findReportsByActiveEquals( Activity )
- Report.findReportsByActiveEquals( Activity ,sortFieldName,sortOrder)
问题是这些生成的finder缺少firstResult、size等参数。
我能想出的新代码是:
@RequestMapping(produces = "text/html")
public String list(@RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {
if (page != null || size != null) {
int sizeNo = size == null ? 10 : size.intValue();
final int firstResult = page == null ? 0 : (page.intValue() - 1) * sizeNo;
// uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
<List<Report> reportsList = Report.findReportsByActiveEquals(1, sortFieldName, sortOrder).getResultList();
uiModel.addAttribute("reports", reportsList);
float nrOfPages = (float) reportsList.size() / sizeNo;
uiModel.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages));
} else {
// uiModel.addAttribute("reports", Report.findAllReports(sortFieldName, sortOrder));
uiModel.addAttribute("reports", Report.findReportsByActiveEquals(1, sortFieldName, sortOrder).getResultList());
}
addDateTimeFormatPatterns(uiModel);
return "reports/list";
}
为什么这是一个问题? 效果是,虽然在列表页面的底部显示:列出每页结果:5 10 15 20 25,但始终列出所有记录。 此外,原始查找器不在 Report_Roo_Finder.aj 文件中。
问题: 如何创建与原始查找器等效的内容,但仅检索 Activity 报告。
最佳答案
您的代码是一个良好的开始,但“报告”中的下一层不足以支持您的代码。
在原始代码中我看到
uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
“报告”仅限于单个页面的数据
在你的新版本中我看到了
uiModel.addAttribute("reports", reportsList);
“报告”始终是所有数据。您需要限制仅包含页面数据的列表。我可能会在 java 文件中创建我自己的“finder”方法,它是
Report.findReportEntries
和
Report.findReportsByActiveEquals
所以我会创建一个
Report.findReportsByActiveEqualsWithPaging
抱歉,我对 ROO 查找器不太熟悉,不知道您是否可以告诉 ROO 如何为您构建这个。
我希望这能给您一个良好的开始。
关于java - Spring roo,这个探测器相当于什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32044838/