重建不带查询字符串参数的 URL

问题描述 投票:0回答:1

假设我有一个页面,其中列出了内容,并在侧边栏中具有该列表的各种过滤器。作为示例,请考虑 ebuyer.com 上的此页面,如下所示:

Screenshot of filter on ebuyer.com

左侧的那些过滤器由查询字符串参数控制,删除其中一个过滤器的链接包含当前页面的 URL,但其中没有该查询字符串参数。

JSP 中有没有一种方法可以轻松构建 remove 链接? 即,是否有一种快速的方法来重现当前 URL,但删除单个查询字符串参数,或者我是否必须通过读取查询字符串参数、将它们添加到基本 URL 并跳过该参数来手动重建 URL。我想离开吗?

我当前的计划是,将类似以下方法作为自定义 EL 函数提供:

    public String removeQueryStringParameter(
            HttpServletRequest request, 
            String paramName, 
            String paramValue) throws UnsupportedEncodingException {

        StringBuilder url = new StringBuilder(request.getRequestURI());

        boolean first = true;
        for (Map.Entry<String, String[]> param : request.getParameterMap().entrySet()) {
            String key = param.getKey();
            String encodedKey = URLEncoder.encode(key, "UTF-8");

            for (String value : param.getValue()) {
                if (key.equals(paramName) && value.equals(paramValue)) {
                    continue;
                }
                if (first) {
                    url.append('?');
                    first = false;
                } else {
                    url.append('&');
                }
                url.append(encodedKey);
                url.append('=');
                url.append(URLEncoder.encode(value, "UTF-8"));
            }

        }
        return url.toString();
    }

但是,还有更好的办法吗?

java url filter query-string url-parameters
1个回答
3
投票

更好的方法是使用

UrlEncodedQueryString

UrlEncodedQueryString
可用于设置、追加或删除参数 来自查询字符串:

 URI uri = new URI("/forum/article.jsp?id=2&para=4");
 UrlEncodedQueryString queryString = UrlEncodedQueryString.parse(uri);
 queryString.set("id", 3);
 queryString.remove("para");
 System.out.println(queryString);
© www.soinside.com 2019 - 2024. All rights reserved.