假设我有一个页面,其中列出了内容,并在侧边栏中具有该列表的各种过滤器。作为示例,请考虑 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();
}
但是有更好的方法吗?
UrlEncodedQueryString
。
可用于设置、追加或删除参数 来自查询字符串:UrlEncodedQueryString
URI uri = new URI("/forum/article.jsp?id=2¶=4"); UrlEncodedQueryString queryString = UrlEncodedQueryString.parse(uri); queryString.set("id", 3); queryString.remove("para"); System.out.println(queryString);