Skip to content

Bug with value list on add user to group #56

Description

@dynstatic

java.lang.IndexOutOfBoundsException: Index 50 out of bounds for length 50

In the AddUserToGroupDialog, the username ComboBox data provider uses query.getOffset() directly as the page number for PageRequest.of(), but getOffset() returns the absolute row offset (e.g., 50), not the page index (e.g., 1). Same issue exists for groupName. This causes the ndexOutOfBoundsException when the combo box tries to load its second page.
The fix is in UserToGroupView.java — divide query.getOffset() by query.getLimit() to get the correct page number:
File: src/main/java/software/netcore/radman/ui/view/UserToGroupView.java
Change both CallbackDataProvider lambdas inside AddUserToGroupDialog:

username.setDataProvider(new CallbackDataProvider<>(query ->
        userService.pageRadiusUsers(new RadiusUserFilter(query.getFilter().orElse(null),
                true, false), PageRequest.of(query.getOffset(),
                query.getLimit(), new Sort(Sort.Direction.ASC, "id")))
                .stream(),
        query -> (int) userService.countRadiusUsers(new RadiusUserFilter(query.getFilter()
                .orElse(null), true, false))));

// AFTER (fixed):
username.setDataProvider(new CallbackDataProvider<>(query ->
        userService.pageRadiusUsers(new RadiusUserFilter(query.getFilter().orElse(null),
                true, false), PageRequest.of(query.getOffset() / query.getLimit(),
                query.getLimit(), new Sort(Sort.Direction.ASC, "id")))
                .stream(),
        query -> (int) userService.countRadiusUsers(new RadiusUserFilter(query.getFilter()
                .orElse(null), true, false))));```

```// BEFORE (broken) - groupName ComboBox:
groupName.setDataProvider(new CallbackDataProvider<>(query ->
        userService.pageRadiusUsersGroup(new RadiusGroupFilter(query.getFilter().orElse(null),
                true, false), PageRequest.of(query.getOffset(),
                query.getLimit(), new Sort(Sort.Direction.ASC, "id")))
                .stream(),
        query -> (int) userService.countRadiusUsersGroup(new RadiusGroupFilter(query.getFilter()
                .orElse(null), true, false))));

// AFTER (fixed):
groupName.setDataProvider(new CallbackDataProvider<>(query ->
        userService.pageRadiusUsersGroup(new RadiusGroupFilter(query.getFilter().orElse(null),
                true, false), PageRequest.of(query.getOffset() / query.getLimit(),
                query.getLimit(), new Sort(Sort.Direction.ASC, "id")))
                .stream(),
        query -> (int) userService.countRadiusUsersGroup(new RadiusGroupFilter(query.getFilter()
                .orElse(null), true, false))));

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions