【问题标题】:Migration Spring Roo web mvc to gvNIX datatables: how to filter records?将 Spring Roo web mvc 迁移到 gvNIX 数据表:如何过滤记录?
【发布时间】:2015-08-24 17:02:39
【问题描述】:

一个用例是只显示登录用户他/她自己的付款,而不是所有付款。

在“旧 web mvc 脚手架”列表视图中,我推送了 list 方法并对其进行了更改,以便检索当前登录用户的所有付款记录,请参见下面的代码。

现在我想迁移到 gvNIX 数据表。默认显示数据库中的所有记录。

问题:如何仅过滤此用户的记录?
一个简单的例子将是很好的或更多的文档。

@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) {
    System.out.println("In payment list controller");
    if (page != null || size != null) {
        int sizeNo = size == null ? 10 : size.intValue();
        final int firstResult = page == null ? 0 : (page.intValue() - 1) * sizeNo;
        //  uiModel.addAttribute("payments", Payment.findPaymentEntries(firstResult, sizeNo, sortFieldName, sortOrder));
        User currentUser = getCurrentUser();
        List<Payment> paymentList = Payment.findPaymentsByPayUser(getCurrentUser(), firstResult, sizeNo, "transactionDate", "DESC");
        uiModel.addAttribute("payments", paymentList);
        float nrOfPages = (float) Payment.countFindPaymentsByPayUser(currentUser) / sizeNo;
        uiModel.addAttribute("maxPages", (int) ((nrOfPages > (int) nrOfPages || nrOfPages == 0.0) ? nrOfPages + 1 : nrOfPages));
    } else {
        //  uiModel.addAttribute("payments", Payment.findAllPayments(sortFieldName, sortOrder));
        uiModel.addAttribute("payments", Payment.findPaymentsByPayUser(getCurrentUser(), "transactionDate", "DESC").getResultList());
    }
    addDateTimeFormatPatterns(uiModel);
    return "payments/list";
}

    private User getCurrentUser() {
    //  Retrieve the current logged in user and his authentication
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    //  Retrieve the user object of the current user
    User user = User.findUsersByEmailAddress(username).getSingleResult();
    return user;
}

【问题讨论】:

    标签: java spring-roo gvnix


    【解决方案1】:

    由于 Datatables 使用 Ajax 请求来检索数据,list 方法仅用作页面抽屉(这是通过 _Roo_GvNIXDatatables.aj 上的 declare precedence AspectJ 指令完成的)。

    要自定义通过 Datatables 获取的数据,您应该输入 setDatatablesBaseFilter。您可以在 _Roo_GvNIXDatatables.aj 文件中找到它。你可以在你的控制器中尝试这样的事情:

    public void setDatatablesBaseFilter(Map<String, Object> propertyMap) {
        // Add here your baseFilters to propertyMap.
        propertyMap.put("paymentUser", getCurrentUser());
    }
    

    如果您需要更复杂的过滤器,您应该自定义 findAllXXXretrieveData 方法(第一个用于数据可视化,第二个用于导出功能)。

    祝你好运!

    【讨论】:

    • 嗨 jmvivo,效果很好!谢谢!是否有任何文档对此进行了解释?
    • 到目前为止,文档(英文)仅在 github.com/DISID/gvnix-samples 上。对不起。在西班牙语中,您可以在项目页面中找到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多