在 LIKE CQL 过滤器中设置通配符会制动过滤器

Setting wildcard in LIKE CQL filter brakes the filter

这是我在 Openlayers 3.9.0 中的过滤器

var cqlFilter = "name='testpoint9'";
var urlTemplate =  'http://localhost:5550/geoserver/mymap/wfs?


var sourceVector = new ol.source.Vector({
service=WFS&version=1.0.0&request=GetFeature&typeName=mymap:layer&CQL_FILTER={{CQLFILTER}}&outputFormat=application/json';
loader : function (extent) {
        var url = urlTemplate.replace('{{CQLFILTER}}', cqlFilter);
        $.ajax(url, {
            type: 'GET',
            success: function(response) {
                var res = response.responseText;
                var geojsonFormat = new ol.format.GeoJSON();
                sourceVector.addFeatures(geojsonFormat.readFeatures(response));
            }
        })
    };

strategy : new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}));
})

function changeFilter() {
    var featsToRemove = layerVector.getSource().getFeatures();
    for (var f=0;f<featsToRemove.length;f++)
    {
        layerVector.getSource().removeFeature(featsToRemove[f]);
    }
    cqlFilter = "name LIKE 'p'";
    sourceVector.clear(true);

}

changeFilter 函数在用户点击按钮后被调用。更改 cqlFilter 全局变量并重新加载功能。

问题是 CQL 过滤器现在可以工作 "name LIKE 'p'" ,但是如果我尝试添加通配符来查找以 p "name LIKE 'p%'" 开头的名称,这将无法工作,而且我也没有得到任何错误消息。

我该如何解决这个问题?

谢谢

尝试为您的 cql 过滤器使用 encodeURIComponent 函数。像这样:

cqlFilter = "name LIKE 'p%'"; encodedFilter = encodeURIComponent(cqlFilter);