我们说我有一个页面列出了东西,并在侧边栏中列出了该列表的各种过滤器。例如,考虑this page 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();
}
但是有更好的方法吗?