【问题标题】:Spring roo, what is equivalent of this finderSpring roo,什么相当于这个finder
【发布时间】:2015-08-17 07:25:45
【问题描述】:

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(active)
  2. Report.findReportsByActiveEquals(active, 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 文件中。

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

【问题讨论】:

    标签: java spring-roo


    【解决方案1】:

    您的代码是一个好的开始,但您在“报告”中的下一层对您的代码的支持不够。

    在我看到的原始代码中

    uiModel.addAttribute("reports", Report.findReportEntries(firstResult, sizeNo, sortFieldName, sortOrder));
    

    “报告”仅限于单个页面的数据

    在你的新版本中我看到了

    uiModel.addAttribute("reports", reportsList);
    

    “报告”始终是所有数据。您需要限制仅包含页面数据的列表。我可能只是在 java 文件中创建自己的“finder”方法,它是

    Report.findReportEntries
    

    Report.findReportsByActiveEquals
    

    所以我会创建一个

    Report.findReportsByActiveEqualsWithPaging
    

    抱歉,我对 ROO 查找器不够熟悉,看您能否告诉 ROO 如何为您构建它。

    我希望这能给你一个好的开始。

    【讨论】:

    • 南雅,这对你有帮助还是你做了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多