Spring roo,相当于这个查找器

时间:2015-08-17 07:25:45

标签: java spring-roo

在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 现在我可以选择:

  1. Report.findReportsByActiveEquals(有源)
  2. Report.findReportsByActiveEquals(active,sortFieldName,sortOrder)
  3. 问题是这些生成的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文件中。

    问题: 如何创建原始查找器的等效项,但只检索活动报告。

1 个答案:

答案 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如何为你建造这个。

我希望这会给你一个良好的开端。