在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";
}
在我的列表中,我只想显示活动报告。
所以在Spring Roo控制台中我添加了:finder add --finderName findReportsByActiveEquals
现在我可以选择:
问题是这些生成的finder缺少firstResult,sizeNo参数。
我能提出的新代码是:
@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文件中。
问题: 如何创建原始查找器的等效项,但只检索活动报告。
答案 0 :(得分:0)
您的代码是一个良好的开端,但“报告”中的下一层不足以支持您的代码。
在原始代码中,我看到了
uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
“报告”仅限于单个页面的数据
在新版本中,我看到了
uiModel.addAttribute("reports", reportsList);
“报告”始终是所有数据。您需要限制页面数据的列表。我可能只是在java文件中创建自己的“finder”方法,它是
的组合Report.findReportEntries
和
Report.findReportsByActiveEquals
所以我要创建一个
Report.findReportsByActiveEqualsWithPaging
抱歉,我对ROO查找器不够熟悉,看看你是否可以告诉ROO如何为你建造这个。
我希望这会给你一个良好的开端。