不使用查询字符串参数重建URL

时间:2016-01-26 18:35:32

标签: java jsp url url-parameters

我们说我有一个页面列出了东西,并在侧边栏中列出了该列表的各种过滤器。例如,考虑this page on ebuyer.com,如下所示:

Screenshot of filter on ebuyer.com

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

在JSP中是否有一种方法可以轻松构建"删除"链接?即,是否有一种快速方法来重现当前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();
    }

但是有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

更好的方法是使用UrlEncodedQueryString

  

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

UrlEncodedQueryString