使用 JSTL 将新参数添加到当前 URL
Adding new parameter to current URL using JSTL
我的应用程序允许用户随时更改语言,这给我带来了一些麻烦。例如,如果用户通过 URL: /category/8?page=3
指定页面,然后尝试通过 ?language=en
更改语言,它将删除以前的参数并将他带到第一页。
如何获取当前 URL 并向其添加另一个参数?我想实现这样的目标:/category/8?page=3&language=en
当前 ULR 为 /category/8?page=3
且用户尝试更改语言。
我尝试使用 ${pageContext.request.requestURL}
但这不是我要找的 returns jsp 页面。
这是我使用的标签文件。另存为 /WEB-INF/tags/replaceParam.tag
:
<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ attribute name="name" required="true" type="java.lang.String" %>
<%@ attribute name="value" required="true" type="java.lang.String" %>
<c:url value="">
<%--
replaces or adds a param to a URL
if $name in query then replace its value with $value.
copies existing
--%>
<c:forEach items="${paramValues}" var="p">
<c:choose>
<c:when test="${p.key == name}">
<c:param name="${name}" value="${value}"/>
</c:when>
<c:otherwise>
<c:forEach items="${p.value}" var="val">
<c:param name="${p.key}" value="${val}"/>
</c:forEach>
</c:otherwise>
</c:choose>
</c:forEach>
<%-- if $name not in query, then add --%>
<c:if test="${empty param[name] }">
<c:param name="${name}" value="${value}"/>
</c:if>
</c:url>
在另一页中的用法(例如 url 是 /category/9?page=3
):
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
<my:replaceParam name='language' value='en' />
输出为/category/8?page=3&language=en
我的应用程序允许用户随时更改语言,这给我带来了一些麻烦。例如,如果用户通过 URL: /category/8?page=3
指定页面,然后尝试通过 ?language=en
更改语言,它将删除以前的参数并将他带到第一页。
如何获取当前 URL 并向其添加另一个参数?我想实现这样的目标:/category/8?page=3&language=en
当前 ULR 为 /category/8?page=3
且用户尝试更改语言。
我尝试使用 ${pageContext.request.requestURL}
但这不是我要找的 returns jsp 页面。
这是我使用的标签文件。另存为 /WEB-INF/tags/replaceParam.tag
:
<%@ tag pageEncoding="UTF-8" trimDirectiveWhitespaces="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ attribute name="name" required="true" type="java.lang.String" %>
<%@ attribute name="value" required="true" type="java.lang.String" %>
<c:url value="">
<%--
replaces or adds a param to a URL
if $name in query then replace its value with $value.
copies existing
--%>
<c:forEach items="${paramValues}" var="p">
<c:choose>
<c:when test="${p.key == name}">
<c:param name="${name}" value="${value}"/>
</c:when>
<c:otherwise>
<c:forEach items="${p.value}" var="val">
<c:param name="${p.key}" value="${val}"/>
</c:forEach>
</c:otherwise>
</c:choose>
</c:forEach>
<%-- if $name not in query, then add --%>
<c:if test="${empty param[name] }">
<c:param name="${name}" value="${value}"/>
</c:if>
</c:url>
在另一页中的用法(例如 url 是 /category/9?page=3
):
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
<my:replaceParam name='language' value='en' />
输出为/category/8?page=3&language=en