Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

ListGrid Pagination with RestDataSource

$
0
0
I have an issue with the ListGrid Pagination with a RestDataSource.
Given:

Code:

    private static final Map<String, Object> urlParams = new HashMap<>();

    static {
        urlParams.put("app", "catv_client");
    }

    private static OperationBinding createBinding(final String httpMethod, final DSOperationType operationType) {
        final DSRequest request = new DSRequest();
        request.setHttpMethod(httpMethod);
        request.setParams(urlParams);
        request.setWillHandleError(true);

        final OperationBinding binding = new OperationBinding();
        binding.setOperationType(operationType);
        binding.setDataProtocol(DSProtocol.POSTMESSAGE);
        binding.setRequestProperties(request);

        return binding;
    }

    public static DataSource createRest(final RestDataSource ds) {
        ds.setDataFormat(DSDataFormat.JSON);
        ds.setPrettyPrintJSON(true);

        final OperationBinding fetch = createBinding("GET", DSOperationType.FETCH);
        final OperationBinding add = createBinding("POST", DSOperationType.ADD);
        final OperationBinding update = createBinding("PUT", DSOperationType.UPDATE);

        // REMOVE PARAMS
        final OperationBinding remove = createBinding("POST", DSOperationType.REMOVE);
        String removeUrl = "/DELETE";
        if (url != null) {
            removeUrl = url.replace("?", "/DELETE?");
        }

        ds.setOperationBindings(fetch, add, update, remove);
        ds.setRemoveDataURL(removeUrl);

        return ds;
    }

This is basically the code for making RestDataSource REST compliant. By default it doesn't use the HTTP-methods, so I had to change the operationBindings. For most of the things this works fine but for paginated listgrid requests it doesn't.

Browsing through the form I saw a post of somebody who has overridden the transformRequest-method, so I gave it a try and I noticed that at that point the DSRequest contains all the information needed for a good pagination request (startRow, etc ...). I didn't change the return, I tried it barely used it for debugging reasons. But the thing is that all the information I have at that point it never reaches my server.

When I look at the request that my server receives I see no parameters at all, besides the one I added myself in the createBinding() method (app=catv_client). The body is also empty, so somewhere between the transformRequest-method and the actual call all the information is lost.

I think the origin of my problems is the fact that I manually set the OperationBindings.

Viewing all articles
Browse latest Browse all 4756

Trending Articles